题目描述
输入一个链表,反转链表后,输出链表的所有元素。
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null) return null;
if(head.next==null) return head;
ListNode preHead = new ListNode(0);
preHead.next=head;
ListNode pre = head;
ListNode cur = head.next;
while(cur!=null){
pre.next = cur.next;
cur.next = preHead.next;
preHead.next = cur;
cur = pre.next;
}
return preHead.next;
}
}
这种方法的思路是:一个preHead节点永远指向第一个节点,当前节点cur和当前节点的前一个节点pre,其中pre一直不变是原始链表中的第一个节点,以链表中的其中一个节点为例:pre.next = cur.next,cur.next=preHead.next,preHead=cur经过这三步骤就可以反转一个节点到首节点,在将cur=pre.next移动到下一个节点进行反转
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null) return null;
if(head.next==null) return head;
ListNode pre = null;
ListNode cur = head;
ListNode pHead = null;
while(cur!=null){
ListNode pNext = cur.next;
if(pNext==null)
pHead = cur;
cur.next = pre;
pre = cur;
cur = pNext;
}
return pHead;
}
}
这一种方法是直接将当前指针的反转,将指向它之后的节点反转方向指向它的前一个节点,上一种方法是将每一个节点移动到第一个节点进行反转,搞清这两种方法的区别