力扣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;}
}