您的位置:首页 > 其它

文章标题

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linkedlist