①英文题目
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次循环,如下
⑥学到的东西
这个跟高中时学的杯子换水的过程有点相似。
要注意一个顺序,先把curr.next给改了指向,再把改动后的这次这个curr赋给pre。
最后返回的是pre。