LeetCode[206]-反/翻转链表
话不多说,先上代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
// 定义一个前驱节点,
// 此节点将作为反转后的新链表的头节点返回
ListNode pre = null;
// 当前节点
ListNode cur = head;
// 当前节点非空时,循环遍历
while (cur != null) {
// 将当前节点的后继节点保存下来,后续使用;
// 否则链表断开后,无法遍历后续的节点了
ListNode next = cur.next;
// 将当前节点的后继节点指向新链表的前驱节点
cur.next = pre;
// 下面将指针后移,遍历后续节点
// 将新链表的头节点指针后移
pre = cur;
// 原链表的指针后移
cur = next;
}
// 返回新链表的头节点
return pre;
}
}
下面画图解释一下原理
- 准备一个链表,1->2->3->4
- 第一遍循环
- 第二遍循环
- 第三遍循环
- 第四遍循环
- 循环结束,返回
pre