文章标题
2016-08-28 09:11
211 查看
Reverse Linked List
题目描述
倒置一个LinkedList我的解法
public ListNode reverseList(ListNode head) { if(head==null) return null; ListNode pre=new ListNode(1); ListNode curr=new ListNode(1); ListNode next=new ListNode(1); curr=head; next=head.next; while(curr!=null){ pre=curr; curr=next; if(next!=null) next=next.next; if(curr!=null) curr.next=pre; } return pre; }
优秀的解法
public ListNode reverseList(ListNode head) { if(head==null) return null; ListNode pre=null; ListNode curr=head; while(curr!=null){ ListNode next=curr.next; curr.next=pre; pre=curr; curr=next; } return pre; }
这两种解法都是递归的解法,同样也是用了三个指针。但是我的解法会出现几个问题
就是我没有办法将head的next设置为null,这个问题直接导致了head—>next—–>head的无限循环问题。通过先从null值作为pre值就可以解决这个问题。
另附上 递归 解法
public ListNode reverseList(ListNode head) { /* recursive solution */ return reverseListInt(head, null); } private ListNode reverseListInt(ListNode head, ListNode newHead) { if (head == null) return newHead; ListNode next = head.next; head.next = newHead; return reverseListInt(next, head); }