【每日一刷LettCode Day08】 #206反转链表

今天又是一道关于链表的题目,大多数链表都可以有递归迭代两种解决方法,今天这道也不例外

题目描述

反转一个单链表。

示例:

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

进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

Solution

节点

public class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

1.迭代

/**
  * 迭代方法
 */
public static ListNode reverseList(ListNode head) {
    ListNode reverseNode = null;
    while (head != null) {
        // 临时节点 存放当前节点的下一个节点
        ListNode temp = head.next;

        // 当前节点的指针翻转
        head.next = reverseNode;

        // 当前节点赋值给翻转的节点
        reverseNode = head;

        // 改变当前节点
        head = temp;
    }
    return reverseNode;
}

2.递归

/**
 * 递归方法
 */
public static ListNode reverseList1(ListNode head) {
    if (head.next == null) {
        // 到达末尾
        return head;
    }
    // 递归调用下一个节点的反转方法
    ListNode reverseNode = reverseList1(head.next);
    // 此节点的下下个节点置为当前节点,形成一个环型
    head.next.next = head;
    // 将当前节点的下一个节点置空,断开环
    head.next = null;
    // 成功反转此节点
    // 返回此节点
    return reverseNode;
}

LettCode-反转链表

GitHub

【每日一刷LettCode Day08】 #206反转链表_第1张图片
微信公众号:一只爱生活的程序猿

你可能感兴趣的:(【每日一刷LettCode Day08】 #206反转链表)