Acwing 35. 反转链表

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

思考题:

请同时实现迭代版本和递归版本。

数据范围

链表长度 [0,30]

样例

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

思路

很怪,这个头结点不是指的不存储任何信息的结点,更类似于头指针
代码

javascript 复制代码
/**
 * 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, cur = head;
        //必须这么写,如果写成pre = head, cur = head -> next会陷入死循环
        while(cur != null){
            ListNode next = cur.next;
            cur.next = pre;
            pre = cur;
            cur = next;
        }
        return pre;
    }
}

递归代码

javascript 复制代码
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        if(head == null || head.next == null) return head;
        ListNode tail = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        return tail;
    }
}
相关推荐
苦 涩3 小时前
考研408笔记之数据结构(七)——排序
数据结构
Victoria.a4 小时前
顺序表和链表(详解)
数据结构·链表
笔耕不辍cj6 小时前
两两交换链表中的节点
数据结构·windows·链表
csj506 小时前
数据结构基础之《(16)—链表题目》
数据结构
謓泽6 小时前
【数据结构】二分查找
数据结构·算法
攻城狮7号7 小时前
【10.2】队列-设计循环队列
数据结构·c++·算法
写代码超菜的8 小时前
数据结构(四) B树/跳表
数据结构
小小志爱学习9 小时前
提升 Go 开发效率的利器:calc_util 工具库
数据结构·算法·golang
egoist20239 小时前
数据结构之堆排序
c语言·开发语言·数据结构·算法·学习方法·堆排序·复杂度
吴天德少侠9 小时前
c++中的链表list
c++·链表·list