首页 > 技术文章 > 基础知识点:链表反转

fcb-it 2020-05-13 21:07 原文

题目描述

反转单向链表

解题思路

很简单面试很常问的题目。解法有两种,递归法和头插法。

递归法:先将头结点反转,头结点的next指向null,再将头结点的下一个节点链表反转,最后头结点的下一个节点指向头结点。

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

头插法:构造一个虚拟的头结点,将链表的每一个节点插入到dummy节点的next节点,最后返回dummy.next。

public ListNode reverseList(ListNode head) {
    ListNode dummy = new ListNode(-1);
    while (head != null) {
        ListNode next = head.next;
        head.next = dummy.next;
        dummy.next = head;
        head = next;
    }
    return dummy.next;
}

推荐阅读