思路:不断从原来链表中取出结点,头插到一个新的链表上
分析:
1)新定义一个新链表,而且是空链表
Node result = null;//result新链表的第一个结点的引用
2)遍历原来的链表
Node cur = head;
while(cur!=null){ cur=cur.next }
3)把每个遍历的结点(cur),头插到新链表(result)中
cur.next=result; result=cur;
class Solution {
public ListNode reverseList(ListNode head) {
ListNode result = null; //新链表result
ListNode cur = head;
while (cur != null) {
ListNode next = cur.next;
cur.next = result; //头插
result = cur;
cur = next;
}
return result;
}
}
代码中之所以没有直接使用cur=cur.next;而是使用Node next=cur.next; cur=next;是因为如果直接使用cur=cur.next,此时cur指向新链表的结点上,导致cur.next已经不再指向原链表的结点了,所以需要先保存cur.next再使cur=next。