美文网首页
LeetCode:206. 反转链表

LeetCode:206. 反转链表

作者: alex很累 | 来源:发表于2022-02-10 11:30 被阅读0次

    问题链接

    206. 反转链表

    问题描述

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

    示例

    解题思路

    这道题简单,但是比较考验链表、指针的基本功。

    1. 递推
      遍历链表,将当前节点的指针改为指向前一个节点(没有前节点,就指向null)。
    2. 递归
      实质就是从链表的底部开始,更改“箭头”方向。

    代码示例(JAVA)

    递推

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode reverseList(ListNode head) {
            ListNode newNode = null;
    
            ListNode cur = head;
            while (cur != null) {
                // 先把下个节点存一下
                ListNode next = cur.next;
                // 将当前节点放到链表
                cur.next = newNode;
                newNode = cur;
                // 移动cur到下一个节点
                cur = next;
            }
            return newNode;
        }
    }
    

    递归

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    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;
        }
    }
    

    相关文章

      网友评论

          本文标题:LeetCode:206. 反转链表

          本文链接:https://www.haomeiwen.com/subject/rasskrtx.html