31.python 单向链表增加节点

import sys
class employee():
    def __init__(self):
        self.name=''
        self.no=0
        self.sarly=0
        self.next=None
def findnode(head,number):
    ptr=head
    while ptr!=None:
        if ptr.no==number:
            return ptr
        ptr=ptr.next
    return ptr
def addnode(ptr,head,new_name,new_no,new_sarly):
    insert_node=employee()
    if not insert_node:
        return None
    insert_node.name=new_name
    insert_node.no=new_no
    insert_node.sarly=new_sarly
    insert_node.next=None

    if ptr==None:#在开头插入
        insert_node.next=head
        return insert_node
    else :
        if ptr.next==None:#结尾
            ptr.next=insert_node
        else:#中间
            insert_node.next=ptr.next
            ptr.next = insert_node
    return head
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.next=None
if not head:
    sys.exit(1)
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.next = None
    newnode.name=namedata[i]
    newnode.no=data[i][0]
    newnode.sarly=data[i][1]
    newnode.next=None
    ptr.next=newnode
    ptr=ptr.next
position=0
while (True):
    print('请输入要插入其后的员工编号,如输入的编号不在此链表中')
    position=int(input('请输入的员工节点将视为此链表的链表头部,要结束插入过程,请输入-1'))
    if position==-1:
        break
    else:
        new_no=int(input('请输入新员工的编号'))
        new_name=input('请输入新员工的名字')
        new_sarly=int(input('请输入新员工的工资'))
        ptr1=findnode(head,position)
        addnode(ptr1,head,new_name,new_no,new_sarly)

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、付费专栏及课程。

余额充值