写点什么

LeetCode 链表专题 01: 反转链表

用户头像
小马哥
关注
发布于: 2021 年 03 月 27 日
LeetCode链表专题01: 反转链表

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

示例:


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

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


限制:


0 <= 节点个数 <= 5000


详细解题思路见代码注释

public class Solution {    /**     * 思路: 将当前currentListNode的next指针指向preListNode     * 注意点: 记录下currentListNode的nextNode, 待上面的操作完成, 更改变量引用, 否则下次循环没有currentListNode     * @param head     * @return     */    public ListNode reverseList(ListNode head) {        // 非空判断: 1, 如果head参数是null, 此时链表中无元素; 2, 如果head.next为null,此时链表只有一个元素        if(head==null||head.next ==null){            return head;        }        ListNode preNode = null;        ListNode thisNode = head;        ListNode nextNode = null;        while (thisNode != null) {            //1, 记录下nextNode: 修改thisNode的next指针钱            nextNode = thisNode.next;            //2, 修改next指针指向: 修改当前节点的next指针指向preNode            thisNode.next = preNode;            //3, 更改变量引用: 为下一个循环做准备            preNode = thisNode;            thisNode = nextNode;        }        // 返回preNode: 这时的preNode肯定不是null, 是循环结束的最后一个元素        return preNode;    }}
class ListNode { int val; ListNode next;
ListNode(int x) { val = x; }}
复制代码


复杂度分析

时间复杂度:O(n),其中 n 是链表的长度。需要遍历链表一次。

空间复杂度:O(1)。


发布于: 2021 年 03 月 27 日阅读数: 15
用户头像

小马哥

关注

自强不息,厚德载物 2018.12.22 加入

像一棵竹子那样, 不断的扎根积累, 活出节节高的人生!

评论

发布
暂无评论
LeetCode链表专题01: 反转链表