反转链表00

题目链接

反转链表

题目描述

反转链表00_第1张图片
反转链表00_第2张图片

注意点

  • 链表中节点的数目范围是 [0, 5000]

解答思路

  • 迭代或递归解决本题

代码

方法一:

// 迭代
class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode prevNode = null;
        ListNode currNode = head;
        while (currNode != null) {
            ListNode nextNode = currNode.next;
            currNode.next = prevNode;
            prevNode = currNode;
            currNode = nextNode;
        }
        return prevNode;
    }
}

方法二:

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

关键点

  • 相对于迭代,递归可能更难理解,其思路为:反转链表后的头结点是原来的尾节点,所以返回的头结点肯定是最后一次递归的节点,但是在每次递归时要得到后面的节点将其指针指向前面的节点,所以需要先递归调用反转方法,同时得到后面的节点,再根据后面的节点将指针进行反转,最后返回后面的节点

你可能感兴趣的:(算法TOP100,链表,数据结构,leetcode,算法,java)