leetcode 题号#206 反转链表

2019-04-14  本文已影响0人  Cloneable

查看题目详情可点击此处

题目

反转一个单链表。

示例:

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

解题思路

反转单链表应该算是链表中比较常见的操作,使用了循环和递归两种方式来解决。

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode reverseHead = null, posHead = null;
        ListNode curr = head;
        while(curr != null) {
            posHead = curr.next;
            curr.next = reverseHead;
            reverseHead = curr;
            curr = posHead;

        }
        return reverseHead;
    }
}

reverse(node)=reverse(nextNode)+nextNodePoint(node)
reverse表示反转函数
nextNode表示进行反转的结点的下一结点
nextNodePoint表示下一结点的后继指针指向进行反转的结点

有了递归公式之后就需要找到递归公式的常量值,也就是递归方法结束的条件。反转的结束结点就是链表的尾结点,当结点的后继指针为NULL时就可以结束递归

当结点的后继指针为空时
reverse(node)=node

递归的方式分析结束了,代码如下。

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

        ListNode reverseHead = reverseList(node.next);
        node.next.next = node;
        node.next = null;
        return reverseHead;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读