思路: 倒着输出首先想到的是栈,但是栈需要遍历两次,且需要n的空间来储存链表。
可以利用三个指针来一边遍历,一遍改变指针的指向。
1 2-> 3 把Node2的next指向1时,相当于截断了链表,因此需要第三个指针在截断前,保存Node3。
最终cur==null 时,pre就是所要的链表的头结点。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur=head;
ListNode pre = null;
ListNode last;
while(cur!=null){
last=cur.next;
cur.next=pre;
pre=cur;
cur=last;
}
return pre;
}
}