《剑指offer》系列 反转链表(Java)

链接

牛客:反转链表

题目描述

输入一个链表,反转链表后,输出新链表的表头。

思路

非常经典的面试题,也是链表部分的基础题目
可以分为递归和非递归两种方法,非递归采用头插法。

代码

//非递归
public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head == null || head.next == null){
            return head;
        }
        ListNode virt = new ListNode(0);
        virt.next = head;
        ListNode p = head;
        while(p.next != null){
            ListNode q = p.next;
            p.next = q.next;
            q.next = virt.next;
            virt.next = q;
        }
        return virt.next;
    }
}

//递归
public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head == null || head.next == null){
            return head;
        }
        ListNode pre = ReverseList(head.next);
        head.next.next = head;
        head.next = null;
        return pre;
    }
}

你可能感兴趣的:(剑指offer)