HJ48_从单向链表中删除指定值的节点_单向链表

发布时间 2023-03-29 15:46:42作者: Aneverforget

自定义类型链表:用链表的方式实现链表的生成、插入和删除。

思路:需要两个class,一个为node,用与生成节点,一个为linklist,用于定义节点操作以及初始化head头节点。

因为单向链表每个节点只有一个指针,因此在执行删除操作时,需要两指针并行。

head头节点作为特殊情况需要另一个if捕捉判断处理。

编程注意:

1、node(data)为生成新的节点。同一个data不能用node(data)操作,否则每次操作都是生成新节点。

2、链表使用的循环较多,要注意陷入死循环,或操作前后顺序搞错造成断链。

 1 #import sys
 2 #a = sys.stdin.sysreadline().strip().split()
#第一个数为链表长度,第二个数为头节点。后面两两一组,第一个数插在第二个数后面。最后一个数为要去删除的值。
3 a=[5, 2, 3, 2, 4, 3, 5, 2, 1, 4, 3] 4 class node(): 5 def __init__(self,data,next=None): 6 self.data=data 7 self.next=next 8 class linklist(): 9 def __init__(self): 10 self.head=None 11 def walk(self): 12 list1=[] 13 cur=self.head 14 while cur: 15 list1.append(cur.data) 16 cur=cur.next 17 print(" ".join(list(map(str,list1)))) 18 def insert(self,data1,data2): 19 cur=self.head 20 #print(data1,cur.data) 21 while cur!=None: 22 if cur.data==data1: 23 temp=node(data2) 24 temp.next=cur.next 25 cur.next=temp 26 break 27 else: 28 cur=cur.next 29 def remove(self,data): 30 if self.head.data==data: 31 self.head=self.head.next 32 else: 33 found=True 34 front=self.head 35 while found: 36 cur=front.next 37 #print(cur.data) 38 if cur.data==data: 39 #print(front.next.data,cur.next.data) 40 front.next=cur.next 41 #print(front.data,front.next.data) 42 found=False 43 else: 44 front=front.next 45 if cur==None: 46 found=False 47 new=a[2:-1] 48 pairs=[] 49 for k,i in enumerate(new): 50 if k%2==0: 51 pairs.append([i,new[k+1]]) 52 l=linklist() 53 l.head=node(a[1]) 54 c=0 55 print(pairs) 56 for i in range(len(pairs)): 57 # c=c+1 58 # print(f"{c:1.0f} walk") 59 data1=pairs[i][1] 60 data2=pairs[i][0] 61 l.insert(data1,data2) 62 #l.walk() 63 l.remove(a[-1]) 64 l.walk()