①英文题目

Reverse a singly linked list.

Example:

Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL

②中文题目

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

③思路

用头插法(我暂时还不确定头插法是个啥,尾插法是个啥具体流程)

同tempnode率先保存住正确的指向,再改掉curr.next的指向。再把已经被“改动过的curr”给赋值给pre,

④代码

 class Solution {
public ListNode reverseList(ListNode head) {
ListNode pre=null;
ListNode curr;
ListNode tempnode=null;
curr=head;
while(curr!=null){
tempnode=curr.next;
curr.next=pre; //每个循环里有4步,这4步里,就只有这一行是在改指针指向,即让curr.next指向pre。
pre=curr;
curr=tempnode;
} //4步总结下来就是先用tempnode保存住curr,next,再把curr.next指向pre(curr.next不再指向原来的某某某),
return pre; //接上一句,然后,把已经更改过指向的curr赋值并覆盖掉原来的pre,最后把tempnode保存的以前的curr.next
} //赋给如今的curr。
}

⑤推导过程(画图)

我只推导了第1、2次循环,如下

[LC]206题 Reverse Linked List (反转链表)(链表)-LMLPHP

⑥学到的东西

这个跟高中时学的杯子换水的过程有点相似。

要注意一个顺序,先把curr.next给改了指向,再把改动后的这次这个curr赋给pre。

最后返回的是pre。

05-11 17:47