题解 | 传统链表思路#从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f?tpId=37&tqId=21271&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
arr = input().split() #输入并存入列表 List = {} #初始化用作链表的字典List res = [] #初始化链表元素列表(稍后会用到的神奇妙妙工具) res.extend(set(arr[2:len(arr)-2])) #把arr中加入了链表的部分唯一化后存入res head = arr[1] #初始化头指针 List[head] = None #初始化头节点指向空 for i in range(2,len(arr) - 1,2): #两个两个地遍历加入链表的部分 if arr[i+1] not in List: #如果每两个中后一个元素字典里没有就添加进链表,且指向前一个元素 List[arr[i+1]] = arr[i] else: #有的话更新链表 List[arr[i]] = List[arr[i+1]] List[arr[i+1]] = arr[i] k = arr[len(arr)-1] #给k赋值 for j in List: #遍历链表中所有值 if List[j] == k: #如果找到了指向k值的几点 List[j] = List[k] #指向k节点的下一个节点 del List[k] #删掉k节点 break #删掉了就结束循环 if len(res) == len(List): #如果长度相等说明循环完都没找到指向k节点的,那k节点就是头节点(妙妙工具) head = List[head] #让头节点指向k节点的下一个节点 del List[arr[1]] #删掉k节点 #输出 p = head #初始化指针p指向头节点 for i in range(len(List)): print(p,end=' ') #按链表顺序输出链表的序列值 p = List[p] #每输出一个让p指向下一个节点
这是经典传统的链表思路