代码实现:
/**
-
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 reverseBetween(ListNode head, int left, int right) {
//引用一个傀儡节点当作新头,可以免去分类讨论
ListNode newHead = new ListNode(-1);
ListNode prev = newHead;
prev.next = head;
//让prev指向left所在节点之前
while(left-1 != 0){
prev = prev.next;
left–;
}
//引用一个leftNode指向left位置
ListNode leftNode = prev.next;
ListNode rightNode = head;
//让rightNode指向right位置
while(right-1 != 0){
rightNode = rightNode.next;
right–;
}
//引用一个cur指向rightNode的下一个节点
ListNode cur = rightNode.next;
//让不反转的节点分离开
prev.next=null;
rightNode.next=null;
//引用一个ret指向leftNode的位置
ListNode ret = leftNode;
ListNode tmp = leftNode.next;
//反转链表
while(tmp != null){
ListNode tmpNext = tmp.next;
tmp.next = ret;
ret = tmp;
tmp = tmpNext;
}
//连接链表,让反转后的尾节点和分离开的后半部分连接
leftNode.next = cur;
//让反转后的头部和prev连接
prev.next = rightNode;
return newHead.next;
}
}
第二题:合并两个链表
======================================================================================
LeetCode 1669:
描述:
给你两个链表 list1 和 list2 ,它们包含的元素分别为 n 个和 m 个。
请你将 list1 中下标从 a 到 b 的全部节点都删除,并将list2 接在被删除节点的位置。
下图中蓝色边和节点展示了操作后的结果:
解题思路:
1.list1.length>=3不用考虑为空链表
2.a>=1不用考虑删除了list1的头节点.
3.引用一个left指向a-1的位置,引用一个right指向b的位置
4.让left的next域指向list2的头节点,让list2的尾节点的next域指向right.next(如果right为尾节点,list2的尾节点的next域还是null不影响)
画图解析:
代码实现:
/**
-
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 mergeInBetween(ListNode list1, int a, int b, ListNode list2) {
ListNode left = list1;
ListNode right = list1;
while(a-1 != 0){
left = left.next;
a–;
}
while(b != 0){
right = right.next;
b–;
}
ListNode last = list2;
while(last.next != null){
last=last.next;
}
left.next = list2;
last.next = right.next;
return list1;
}
}
第三题:二进制链表转整数
==============================================================================================================
LeetCode 1290:
描述:
最后
做任何事情都要用心,要非常关注细节。看起来不起眼的、繁琐的工作做透了会有意想不到的价值。
当然要想成为一个技术大牛也需要一定的思想格局,思想决定未来你要往哪个方向去走, 建议多看一些人生规划方面的书籍,多学习名人的思想格局,未来你的路会走的更远。
更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务
习名人的思想格局,未来你的路会走的更远。
更多的技术点思维导图我已经做了一个整理,涵盖了当下互联网最流行99%的技术点,在这里我将这份导图分享出来,以及为金九银十准备的一整套面试体系,上到集合,下到分布式微服务
[外链图片转存中…(img-R6gK05mA-1720112266721)]
[外链图片转存中…(img-PknQpl4g-1720112266722)]
[外链图片转存中…(img-z0CZKLsF-1720112266722)]
[外链图片转存中…(img-qK84kXOp-1720112266723)]