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

①英文题目

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,

④代码

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

⑤推导过程(画图)

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

⑥学到的东西

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

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

    最后返回的是pre。

猜你喜欢

转载自www.cnblogs.com/zf007/p/11579914.html
今日推荐