反转链表

2020-04-10  本文已影响0人  环宇飞杨

解题思路

核心思路:将链表head 的节点从头部开始依次截断并指向新节点B。节点B为引用类型,无新增内存占用。
截断链表的方法为:

head.next = null; //此时的head节点就是被截断的单个节点

但这样操作时该节点后面的数据就再也找不到了,所以需要临时存一下,变为:

ListNode tempNode = head.next;
head.next = null;

假设head节点值为2,然后如果B节点为 1->null;
那么如果 head.next = B;
值就变成了 2->1->null;

如此循环执行,B最终就是想要的结果。

当然B节点初始为null,其变化步骤为:

  1. null
  2. 1->null;
  3. 2->1->null;
  4. 3->1->null;
  5. 4->3->2->1->null;
  6. ...

head 初始为 1->2->3->4->5->null; 因其头节点不断被截断取出,所以其变化步骤为:

  1. 1->2->3->4->5->null;
  2. 2->3->4->5->null;
  3. 3->4->5->null;
  4. 4->5->null;
  5. ...

代码

/**
 * 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 B = null;
        while (head != null){
            ListNode temp = head.next;
            head.next = B;
            B = head;       //更新指针指向,供下一次迭代使用
            head = temp;    //更新指针指向,供下一次迭代使用
        }
        return B;
    }
}
上一篇下一篇

猜你喜欢

热点阅读