反转单链表

简介: 反转链表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;
    }
}


目录
打赏
0
0
0
0
1
分享
相关文章
|
1月前
|
算法系列之递归反转单链表
递归反转链表的基本思路是将当前节点的next指针指向前一个节点,然后递归地对下一个节点进行同样的操作。递归的核心思想是将问题分解为更小的子问题,直到达到基本情况(通常是链表末尾)。
41 5
算法系列之递归反转单链表
|
1月前
|
反转单链表
反转单链表的核心思想是遍历链表时改变每个节点的 `next` 指针方向,使其指向前驱节点。
|
10月前
链表反转问题
链表反转问题
71 0
|
10月前
每日一题——反转单链表
每日一题——反转单链表
【剑指offer】-反转链表-15/67
【剑指offer】-反转链表-15/67
链表OJ之 反转单链表
链表OJ之 反转单链表
74 0
链表OJ之 反转单链表
剑指offer 23. 反转链表
剑指offer 23. 反转链表
94 0
leetCode206 - 反转单链表
leetCode206 - 反转单链表
77 0
反转链表(剑指offer 24)
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
107 0