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 @ 2023-01-10 20:35  fxbest  阅读(27)  评论(0)    收藏  举报