力扣labuladong一刷day14天翻转单链表共2题

力扣labuladong一刷day14天翻转单链表共2题

文章目录

      • 力扣labuladong一刷day14天翻转单链表共2题
      • 一、06. 反转链表
      • 二、92. 反转链表 II

一、06. 反转链表

题目链接:https://leetcode.cn/problems/reverse-linked-list/
思路:
迭代法:新new一个虚拟头结点,然后遍历当前链表,每一个都紧跟着插入在虚拟头结点之后即可完成翻转。

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode root = new ListNode();
        ListNode p1 = root, p2 = head;
        while (p2 != null) {
            ListNode t = p2;
            p2 = p2.next;
            t.next = null;
            t.next = p1.next;
            p1.next = t;
        }
        return root.next;
    }
}

二、92. 反转链表 II

题目链接:https://leetcode.cn/problems/reverse-linked-list-ii/
思路:和上一题类似,只不过是要从left的位置开始插入,到right停止。

class Solution {
     public ListNode reverseBetween(ListNode head, int left, int right) {
        ListNode root1 = new ListNode(-1, head);
        ListNode p1 = root1, p2 = null;
        
        int i = 1;
        while (p1.next != null) {
            if (i == left) break;
            p1 = p1.next;
            i++;
        }
        p2 = p1.next;
        ListNode end = p2;
        p1.next = null;
        while (p2 != null) {
            ListNode t = p2;
            p2 = p2.next;
            t.next = p1.next;
            p1.next = t;
            i++;
            if (i > right) {
                break;
            }
        }
        end.next = p2;
        return root1.next;
    }
}

你可能感兴趣的:(力扣算法题,leetcode,算法,职场和发展)