LeetCode题解之反转链表

反转链表

题目描述

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

限制:

  • 0 <= 节点个数 <= 5000

解题思路

使用双指针法,定义两个指针 pre 和 cur,pre 在前,cur 在后,每次让 cur 的 next 指向 pre ,pre 指向 cur ,完成一次局部反转,注意在每次反转之前需要记录 cur 的 next,以便于下一次反转,每次完成反转之后,pre 和 cur 同时向前移动,直到 pre 到达链表的尾部,即为完成了整个链表的反转。

复杂度分析

  • 时间复杂度:O(n),其中 n 为链表中节点的个数。
  • 空间复杂度:O(1)。

代码实现

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode pre = null;
        ListNode cur = head;
        ListNode next = null;
        while (cur != null) {
            next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
}

你可能感兴趣的:(LeetCode题解之反转链表)