反转链表
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,其变化步骤为:
- null
- 1->null;
- 2->1->null;
- 3->1->null;
- 4->3->2->1->null;
- ...
head 初始为 1->2->3->4->5->null; 因其头节点不断被截断取出,所以其变化步骤为:
- 1->2->3->4->5->null;
- 2->3->4->5->null;
- 3->4->5->null;
- 4->5->null;
- ...
代码
/**
* 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;
}
}