反转单链表

简介: 反转链表1、题目2、思路3、代码4、递归方式代码

1、题目


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


示例:

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

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


2、思路


遍历链表,并在访问各节点时修改 next 引用指向


复杂度分析:

时间复杂度 O(N) : 遍历链表使用线性大小时间。

空间复杂度 O(1) : 变量 pre 和 cur 使用常数大小额外空间。


3、代码


class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode cur = head, pre = null;
        while(cur != null){
            ListNode tmp = cur.next;
            cur.next = pre;
            pre = cur;
            cur = tmp;
        }
        return pre;
    }
}


4、递归方式代码


class Solution {
    public ListNode reverseList(ListNode head) {
        //结束条件
        if(head == null || head.next == null){
            return head;
        }
        //递
        ListNode p = reverseList(head.next);
        //每一次执行的操作
        head.next.next = head;
        head.next = null;
        //归
        return p;
    }
}


相关文章
|
2月前
|
测试技术
1025 反转链表
1025 反转链表
|
12月前
反转链表II
链表这部分的题,不少都离不开单链表的反转,参考:反转一个单链表 这道题加上哨兵位的话会简单很多,如果不加的话,还需要分情况一下,像是从头节点开始反转还是头节点以后开始反转,有了哨兵位后就只有一种情况了。 malloc一个哨兵位,next指向head,遍历两次,一次找起点,,开始节点的前一个节点保存下来,为了连接reverse返回的节点地址;一次找结束,结束的节点next节点保存下来,并使该节点的next指针置空,剩下的就是连接的问题,比较简单。
37 0
|
3月前
链表反转问题
链表反转问题
28 0
|
3月前
|
C++ 索引
反转链表(C++)
反转链表(C++)
25 0
链表OJ之 反转单链表
链表OJ之 反转单链表
57 0
链表OJ之 反转单链表
leetCode206 - 反转单链表
leetCode206 - 反转单链表
51 0
|
测试技术
「日更刷题」206. 反转链表
「日更刷题」206. 反转链表
80 0
|
存储 前端开发 程序员
实现链表反转
实现链表反转
实现链表反转
|
存储 机器学习/深度学习 算法
链表——206. 反转链表(这题很重要)
本专栏按照数组—链表—哈希—字符串—栈与队列—二叉树—回溯—贪心—动态规划—单调栈的顺序刷题,采用代码随想录所给的刷题顺序,一个正确的刷题顺序对算法学习是非常重要的,希望对大家有帮助
链表——206. 反转链表(这题很重要)