【LeetCode 206】算法:反转链表

题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

image


要反转一个单链表,需要逐个遍历链表中的节点,并且改变每个节点的 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;  //当前链表的头结点是左指针的结点
    }
}
posted @ 2025-07-28 16:28  junjunyi  阅读(22)  评论(0)    收藏  举报