LeetCode(59)反转链表 II【链表】【中等】
2023-12-14 20:31:56
链接: 反转链表 II
1.题目
给你单链表的头指针 head
和两个整数 left
和 right
,其中 left <= right
。请你反转从位置 left
到位置 right
的链表节点,返回 反转后的链表 。
示例 1:
输入:head = [1,2,3,4,5], left = 2, right = 4
输出:[1,4,3,2,5]
示例 2:
输入:head = [5], left = 1, right = 1
输出:[5]
提示:
- 链表中节点数目为
n
1 <= n <= 500
-500 <= Node.val <= 500
1 <= left <= right <= n
进阶: 你可以使用一趟扫描完成反转吗?
2.答案
/**
* 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 static ListNode reverseBetween(ListNode head, int left, int right) {
if (left == right) {
return head;
}
ListNode node = head;
int index = 1;
ListNode beforeLeftNode = null;
ListNode leftNode = null;
ListNode rightNode = null;
ListNode afterRightNode = null;
ListNode beforeNode = null;
while (node != null) {
if (index == left) {
beforeLeftNode = beforeNode;
leftNode = node;
beforeNode = node;
node = node.next;
} else if (index > left && index < right) {
ListNode afterNode = node.next;
node.next = beforeNode;
beforeNode = node;
node = afterNode;
} else if (index == right) {
afterRightNode = node.next;
rightNode = node;
rightNode.next = beforeNode;
break;
} else {
beforeNode = node;
node = node.next;
}
index++;
}
if (beforeLeftNode != null) {
beforeLeftNode.next = rightNode;
} else {
head = rightNode;
}
assert leftNode != null;
leftNode.next = afterRightNode;
return head;
}
}
3.提交结果截图
整理完毕,完结撒花~ 🌻
文章来源:https://blog.csdn.net/qq_33204709/article/details/135003289
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!