LeetCode 206:反转链表(2022/10/19)

57 阅读1分钟

题目描述

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

样例

输入: head = [1,2,3,4,5]
输出: [5,4,3,2,1]

输入: head = [1,2]
输出: [2,1]
输入: head = []
输出: []

算法1

(头插法) O(n)O(n)

使用头插法来解决此问题。 定义一个虚拟头结点 res,用来保存返回结果,然后遍历 head,每遍历到一个结点,就将其插入到 res的下一个结点,依次类推,知道 head 为空,最后返回 res.next.

Java 代码

class Solution {
    public ListNode reverseList(ListNode head) {
        // 头插法实现
        ListNode res = new ListNode(-1);

        while(head != null) {
            ListNode p = head;
            head = head.next;
            p.next = res.next;
            res.next = p;
        }
        return res.next; 
    }
}