每日一题之反转链表

    技术2026-04-02  8

    反转一个单链表。

    示例:

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

    进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-linked-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    我的解法 将指针指向反转就能做到将整个链表反转

    定义三个指针 pre 前一位指针 cur 当前位指针 temp 存放临时变量的指针

    public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode cur = head; ListNode temp = null; while (cur != null) { temp = cur.next; cur.next = pre; pre = cur; cur = temp; } return pre;

    这题递归实属有点难得理解 脑阔疼

    题解中一个大佬的递归解法

    class Solution { public ListNode reverseList(ListNode head) { //递归终止条件是当前为空,或者下一个节点为空 if(head==null || head.next==null) { return head; } //这里的cur就是最后一个节点 ListNode cur = reverseList(head.next); //如果链表是 1->2->3->4->5,那么此时的cur就是5 //而head是4,head的下一个是5,下下一个是空 //所以head.next.next 就是5->4 head.next.next = head; //防止链表循环,需要将head.next设置为空 head.next = null; //每层递归函数都返回cur,也就是最后一个节点 return cur; } }
    Processed: 0.009, SQL: 9