题目描述
输入一个链表,反转链表后,输出新链表的表头。
代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null) return head;
ListNode preNode = null;
//下一个节点指针
ListNode nextNode = null;
while (head != null){
nextNode = head.next; //nextNode 指向下一个节点
head.next = preNode;
preNode = head; //preNode 指针向后移动
head = nextNode;
}
return preNode;
}
}
分析
1->2->3->4
第一步
nextNode指向2,意味着nextNode就是2->3->4
第二步
head.next为null,意味着1和2断开,此时head就是1
第三步
preNode为1,这是反转后的链表
第四步
head重新赋值为nextNode,也就是2->3->4
继续while循环
nextNode变为3->4
2和3断开,2的下一个指向preNode也就是1,preNode变为2->1
head重新赋值nextNode也就是3->4