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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容