VIVO 笔试编程题准备

本文探讨了在Python中处理数组和链表的实用方法。首先介绍了如何找出一个数组中存在而另一个数组中不存在的元素,保持元素原有的顺序。接着深入讲解了一种高效的链表反转算法,特别适用于反转链表的指定部分,例如从第M个到第N个元素。通过具体的代码实现,读者可以更好地理解这些数据结构的操作细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

'''
给A,B两个数组,
输出出现在A中而没有出现在B中的元素,输出元素前后顺序不变
'''
if __name__=="__main__":
    array_A=list(map(lambda x:int(x),input().strip().split()))
    array_B=list(map(lambda x:int(x),input().strip().split()))

    result=[]
    for i in range(len(array_A)):
        find=False
        for j in range(len(array_B)):
            if array_B[j]==array_A[i]:
                find=True
                break
        if find==False:
            result.append(array_A[i])
    print(result)
'''
反转链表的第M个至第N个元素
对链表进行反转:即改变链表中节点的next域
'''
class ListNode:
    def __init__(self,x):
        self.value=x
        self.next=None

def inverse_M_to_N(head,M,N):
    if M>=N or head==None or head.next==None:
        return head
    N=N-M
    new_head=ListNode(0)
    new_head.next=head
    prev=new_head
    curr=head
    while M>1:
        prev=prev.next
        curr=curr.next
        M-=1
    part1_end=prev
    part2_end=curr
    prev=prev.next
    curr=curr.next
    next=None
    while N>0:
        next=curr.next
        curr.next=prev

        prev = curr
        curr=next
        N-=1
    part3_start=next
    part2_start=prev
    part1_end.next=part2_start
    part2_end.next=part3_start

    return  new_head.next

if __name__=="__main__":
    a=[1,2,3,4,5,6]
    LinkList=ListNode(0)
    head=LinkList
    for i in range(len(a)):
        new_node=ListNode(a[i])
        head.next=new_node
        head=head.next

    inverse_head=inverse_M_to_N(LinkList.next,1,6)

    new_head=inverse_head
    while(new_head):
        print(new_head.value)
        new_head=new_head.next

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值