單鏈表的節點插入


在單鏈表中插入節點有三種方式,插入到節點的頭部、插入到最后一個節點后面、以及插入到鏈表中間任意位置

1.新節點插入第一個節點之前,即成為此鏈表的首節點,只需要把新節點的指針指向鏈表原來的第一個節點,再把鏈表頭指針指向新節點即可

算法如下

newnode.next=first

first=newnode

2.新節點插入最后一個節點之后,只需要把鏈表最后一個節點的指針指向新節點,新節點的指針再指向None即可

算法如下:

ptr.next=newnode
newnode.next=None

 

3.新節點插入鏈表中間位置例如插入節點在X、Y之間只要將X節點的指針指向新節點,新節點指針指向Y即可

算法如下

newnode.next=x.next
x.next=newnode

我們設計一個Python程序,建立一個員工數據的單向鏈表並允許在鏈表頭部尾部和鏈表中間插入新節點,最后離開時列出此鏈表的最后所有節點的數據字段內容

import sys

class employee:
    def __init__(self):
        self.num=0
        self.salary=0
        self.name=''
        self.next=None
        
def findnode(head,num):
    ptr=head
    
    while ptr!=None:
        if ptr.num==num:
           return ptr
        ptr=ptr.next
    return ptr

def insertnode(head,ptr,num,salary,name):
    InsertNode=employee()
    if not InsertNode:
        return None
    InsertNode.num=num
    InsertNode.salary=salary
    InsertNode.name=name
    InsertNode.next=None
    if ptr==None: #插入第一個節點
        InsertNode.next=head
        return InsertNode
    else:
        if ptr.next==None: #插入最后一個節點
            ptr.next=InsertNode
        else: #插入中間節點
            InsertNode.next=ptr.next
            ptr.next=InsertNode
    return head

position=0
data=[[1001,32367],[1002,24388],[1003,27556],[1007,31299], \
      [1012,42660],[1014,25676],[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']
print('員工編號 薪水 員工編號 薪水 員工編號 薪水 員工編號 薪水')
print('-------------------------------------------------------')
for i in range(3):
    for j in range(4):
        print('[%4d] $%5d ' %(data[j*3+i][0],data[j*3+i][1]),end='')
    print()
print('------------------------------------------------------\n')
head=employee() #建立鏈表的頭部
head.next=None

if not head:
    print('Error!! 內存分配失敗!!\n')
    sys.exit(1)
head.num=data[0][0]
head.name=namedata[0]
head.salary=data[0][1]
head.next=None
ptr=head
for i in range(1,12): #建立鏈表
    newnode=employee()
    newnode.next=None
    newnode.num=data[i][0]
    newnode.name=namedata[i]
    newnode.salary=data[i][1]
    newnode.next=None
    ptr.next=newnode
    ptr=ptr.next

while(True):
    print('請輸入要插入其后的員工編號,如輸入的編號不在此鏈表中,') 
    position=int(input('新輸入的員工節點將視為此鏈表的鏈表頭部,要結束插入過程,請輸入-1:'))
    if position ==-1:
        break
    else:
        
        ptr=findnode(head,position)
        new_num=int(input('請輸入新插入的員工編號:'))
        new_salary=int(input('請輸入新插入的員工薪水:'))
        new_name=input('請輸入新插入的員工姓名: ')
        head=insertnode(head,ptr,new_num,new_salary,new_name)
    print()
              
ptr=head
print('\t員工編號    姓名\t薪水')         
print('\t==============================')
while ptr!=None:
    print('\t[%2d]\t[ %-7s]\t[%3d]' %(ptr.num,ptr.name,ptr.salary))
    ptr=ptr.next


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM