【LeetCode 206】算法:反转链表
题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

要反转一个单链表,需要逐个遍历链表中的节点,并且改变每个节点的 next 指针,使其指向前一个节点而不是后一个节点。
在遍历过程中,需要维护两个指针:左指针 left(代表前一个节点,初始为 头结点),右指针 right(代表当前节点,初始为 第二个结点)。
算法步骤:
1. 初始化,左指针为头结点,右指针为第二个结点。
2. 把头结点指向 null。
3. 遍历链表,直到 right 为 null。
4. 在每次迭代中,保存 right.next 到 临时指针 t,然后将 right.next 设置为 left,最后将 left 和 right 前进到下一个节点。
5. 当 right 为 null 时,left 将指向新的头节点。
6. 返回 left 作为反转后链表的头节点。
我的 Java 代码:
/**
* 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) {
if(head==null){
return head;
}
ListNode left = head; //左指针初始化为结点
ListNode right = head.next; //右指针初始化为第二个结点
head.next = null; //注意!初始化指针后,把头结点指向null,代表头结点是链表末尾
// 遍历链表,直到右指针结点为null
while(right!=null){
ListNode t = right.next; //1.临时节点,用于存储下一个节点
right.next = left; //2.把当前结点指向上一个结点
left = right; //3.左指针后移
right = t; //4.右指针后移
}
return left; //当前链表的头结点是左指针的结点
}
}
所有正文内容皆为本人原创,禁止搬运

浙公网安备 33010602011771号