leetcode206-反转链表

思路

  • 方法一,递归。将head节点和后续所有节点看做两个部分,对后续部分执行递归函数,然后将两部分组合起来。关键在于head节点的next指向的是除head以外后续所有节点反转后的最后一个节点。
  • 方法二,迭代。使用双指针依次修改每个节点的next即可。

要点

  • 递归法要排除headhead.nextnull的情形。
  • 迭代双指针法最后返回的是pre

代码

递归版:

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null || head.next==null)
            return head;
        ListNode t=reverseList(head.next);
        head.next.next=head;
        head.next=null;
        return t;
    }
}

迭代版(双指针):

class Solution {
    public ListNode reverseList(ListNode head) {
        if(head==null || head.next==null)
            return head;
        ListNode p=head;
        ListNode pre=null;
        while(p!=null){
            ListNode t=p.next;
            p.next=pre;
            pre=p;
            p=t;
        }
        return pre;
    }
}
posted @   fxbest  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示