一、写在前面的废话
刷题偶遇一将链表逆序的写法,感觉很棒,记录一下
二、代码
废话不多说,直接上代码,以表达我开心与急切的心情
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode[] reverse(ListNode head){//[0]是头指针,[1]是尾指针
ListNode[] result = {head, head}; //逆序之后,原来的头指针就变成了结果的尾指针,即result[1]的值不会再变
//①————————————————————————
ListNode n = head;
head = null;
ListNode m = n;
while(n != null){
m = n;
n = n.next;
m.next = head;
head = m;
}
//②————————————————————————
result[0] = head;
return result;
}
}
三、①-②处代码图文分析
1、待逆序链表
2、首先初始化用到的结点
ListNode n = head;
head = null;
ListNode m = n;
3、接下来进入while循环
(1)n.val == a1
依次执行
m = n;
n = n.next;
m.next = head;
执行结果:
更新head:
head = m;
(2)n.val == a2
依次执行
m = n;
n = n.next;
m.next = head;
执行结果:
更新head:
head = m;
(3)n.val == a3
依次执行
m = n;
n = n.next;
m.next = head;
执行结果:
更新head:
head = m;
(4) n == null
退出while循环