华为机试48-从单向链表中删除指定值的节点(难)
题目描述
输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。
链表结点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
详细描述:
本题为考察链表的插入和删除知识。
链表的值不能重复
构造过程,例如
1 <- 2
3 <- 2
5 <- 1
4 <- 5
7 <- 2
最后的链表的顺序为 2 7 3 1 5 4
删除 结点 2
则结果为 7 3 1 5 4
输入描述:
1 输入链表结点个数
2 输入头结点的值
3 按照格式插入各个结点
4 输入要删除的结点的值
输出描述:
输出删除结点后的序列,每个数后都要加空格
示例1
输入
5
2
3 2
4 3
5 2
1 4
3
输出
2 5 4 1
参考1:
class Node(object): #类Node def __init__(self,elem): self.elem = elem self.next = None class SingleLinkList(object): #类SingleLinkList def __init__(self,node=None): self._head = node def length(self): cur = self._head count = 0 while cur: cur = cur.next count += 1 return count def travel(self): cur = self._head while cur: print(cur.elem, end = " ") cur = cur.next print("") def add(self,item): node = Node(item) node.next = self._head self._head = node def insert(self,item,index): node = Node(item) if not self._head: self._head = node else: cur = self._head count = 0 while cur: if cur.elem == index: node.next = cur.next cur.next = node break else: cur = cur.next def remove(self,item): node = Node(item) cur = self._head pre = None while cur: if cur.elem == item: if cur == self._head: self._head = cur.next else: pre.next = cur.next break else: pre = cur cur = cur.next while True: try: ll = SingleLinkList() a = list(map(int,input().split())) n = a[0] ll.add(a[1]) for i in range(n-1): c = a[2+i*2] d = a[3+i*2] ll.insert(c,d) ll.remove(a[-1]) ll.travel() except: break
执行结果: 答案正确:恭喜!您提交的程序通过了所有的测试用例 用例通过率: 100.00% 运行时间: 33ms 占用内存: 3660KB