31.python单向链表删除

import sys
class employee:
    def __init__(self):
        self.name=''
        self.no=0
        self.sarly=0
        self.next=None
data=[[1001,32367],[1002,24338],[1003,27556],[1007,31299],\
      [1012,42660],[1018,44145],[1018,44145],[1043,52182],\
      [1031,32769],[1037,21100],[1041,32196],[1046,25776]]
namedata=['allen','scott','marry','john','mark','ricky',\
          'lisa','jasica','hanson','amy','bob','jack']
head=employee()
head.name=namedata[0]
head.no=data[0][0]
head.sarly=data[0][1]
head.next=None
ptr=head
for i in range(1,12):
    newnode=employee()
    newnode.name=namedata[i]
    newnode.sarly=data[i][1]
    newnode.no=data[i][0]
    newnode.next=None
    ptr.next=newnode
    ptr=ptr.next
ptr=head
while ptr!=None:#建立单向链表
    print('\t[%2d]\t[%-7s]\t[%3d]' % (ptr.no, ptr.name, ptr.sarly))
    ptr=ptr.next

def findnode(head,number,findyes):
    ptr=head
    if not ptr:
        print('error')
        exit(-1)
    while ptr!=None:
        if ptr.no==number:
            findyes=findyes+1
            return ptr

        ptr=ptr.next
    if findyes==0:
        print("没有找到")
        return 0
    return ptr
def delnode(head,find_node):
    ptr=head
    if find_node.no==head.no:
        head=head.next#删除头部
        print("已删除第%d号员工,姓名:%s,薪资%d"%(find_node.no,find_node.name,find_node.sarly))
    else:
        while ptr.next!=find_node:
            ptr=ptr.next#找前一个节点
        if ptr.next!=None:
            ptr.next=ptr.next.next
            print("已删除第%d号员工,姓名:%s,薪资%d" % (find_node.no, find_node.name, find_node.sarly))
        else:
            ptr=None
            print("已删除第%d号员工,姓名:%s,薪资%d" % (find_node.no, find_node.name, find_node.sarly))
    return head

while(True):
    number=int(input('输入需要删除的员工编号,输入-1则终止循环'))
    if number==-1:
        break
    findyes=0
    find_node=findnode(head,number,findyes)
    head=delnode(head,find_node)
    ptr=head
    while ptr!=None:
        print('\t[%2d]\t[%-7s]\t[%3d]' % (ptr.no, ptr.name, ptr.sarly))
        ptr=ptr.next

参考图解数据结构书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值