数据结构 单链表 LeetCode 反转链表Ⅱ 合并两个链表 二进制链表转整数


代码实现:


/**

  • 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)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值