单向链表中插入新节点
2018-12-28 14:46
92 查看
在单向链表中插入新节点有三种情况:
1.加到第一个节点之前
2.加到最后一个节点之后
3.加到链表中间任一位置
先说1,新节点插入第一个节点之前,成为此链表的首节点:只需把新节点的指针指向链表原来的第一个节点,再把链表头指针指向新节点即可。
python的算法如下:
newnode.next=first first=newnode
第二种情况,新节点插入最后一个节点之后:只需把链表最后一个节点的指针指向新节点,新节点的指针指向None即可。
python算法如下:
ptr.next=newnode newnode.next=None
第三种情况,将新节点插入链表中间的位置,例如插在节点X和Y之间,只要将X节点的指针指向新节点,新节点的指针指向Y节点即可。
python算法如下:
newnode.next=x.next x.next=newnode
下面是一个范例
设计一个python程序,建立一个员工数据的单向链表,并且允许在链表头部、尾部和中间插入新节点,最后离开时,列出此链表的最后所有节点的数据字段的内容。结构成员类型如下:
class employe: def __init__(self): self.num=0 self.salary=0 self.name='' self.next=None
范例程序如下:
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('-------------------------------------------------') 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
运行结果如下:
相关文章推荐
- 单向链表中,如何在给定节点前快速插入一个节点?
- 单向链表中,如何在给定节点前快速插入一个节点?
- 单向链表末尾插入一个节点(指向指针的指针该怎样理解)
- 单向链表的节点插入与删除
- [华为机试练习题]49.向升序单向链表中插入一个节点
- 向升序单向链表中插入一个节点
- 单向链表中,如何在给定节点前快速插入一个节点?
- 向有序循环单向链表中插入节点
- 单向链表之有序插入节点(C语言实现)
- 华为机试题:向升序单向链表中插入一个节点
- 单向链表插入新节点
- 单向链表小练习--》创建链表头,添加删除链表节点,释放链表内存,选择插入数据
- 向升序单向链表中插入一个节点
- 向升序单向链表中插入一个节点
- 单向链表(三) 在指定位置插入新的节点
- 华为OJ 向升序单向链表中插入一个节点
- 求助 向升序单向链表中插入一个节点 求教程序中哪里错了?
- 65.输出单向链表中节点上最大值
- 删除单向链表中的节点
- 不带头节点的单向链表逆序