剑指offer:有序链表的合并python

这里的remove不是真正的删除,而是将链表结构中的指针断掉,说一下解题思路:

第一个链表位置的确定
首先用两个指针分别指向list1,然后两个指针指向list2
然后根据要删除的链长,让第一个指针先走b-a步
再让两个指针同时向前走,这时两个指针一直间隔b-a步,这里要注意一点:要删除a节点到b节点,移动的步长为a-1,也就是第二个指针指向a节点的前一个节点,同时第一个指针指向b节点
此时,链表1的两个需要断掉的节点位置已经找到

下面寻找链表2的首尾,
首节点很好找到
然后尾节点要通过遍历,这里的结束条件为,下一个节点为空

最后就是交换指针
将链表1中第二个指针的next指向链表2的头
将链表2中的尾指针的next指向链表1中第二个指针的next(因为在前面已经说过了,第二指针其实是在b的位置,next才是要链接的位置)

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def mergeInBetween(self, list1, a, b, list2):
        """
        :type list1: ListNode
        :type a: int
        :type b: int
        :type list2: ListNode
        :rtype: ListNode
        """
        p1=p2=list1
        l1=l2=list2
        # 先走b-a步
        for i in range(b-a+1):
            p1=p1.next
        #两个指针相差b-a步走
        #p1停留在a-1步
        #p2停留在b步
        for j in range(a-1):
            p1=p1.next
            p2=p2.next
        # 第二个链表走到末尾,指向空
        while l2.next :
            l2=l2.next
        # 交换
        p2.next=l1
        l2.next=p1.next
        return list1

各位大佬,多多指正呀!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值