KiKi学习了结构体和指针,他了解了结构体类型可以定义包含多个不同类型成员,而指针本质是内存地址,是引用数据的另外一种方式。现在他想将多个输入的数据通过结构体和指针的方式连接在一起,形成一个单向链表,即:每个结点是结构体类型,包括整型数据成员(data)和结构体指针类型成员(next),每个结点的指针部分指向下一个输入的结点。具体建立过程如下:先输入n个整数,按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。输出删除后的单链表信息。
包括三行:第一行输入数据个数n (3≤n≤100);第二行依次输入n个整数,用空格分隔;
第三行输入欲删除数据m。
包括两行:第一行输出完成删除后的单链表长度;
第二行依次输出完成删除后的单链表数据。
5 1 2 2 3 4 2
3 1 3 4
class linkNode(): def __init__(self, data): self.data = data self.next = None class sigLink(): def __init__(self, item): self.length = len(item) if self.length <= 0: return i = 0 self.head = linkNode(item[i]) self.tail = self.head i += 1 while i < self.length: self.tail.next = linkNode(item[i]) self.tail = self.tail.next i += 1 def getlength(self): """ 获取链表的长度 :return: """ print(self.length) def printlink(self): if self.head == None: print() p = self.head while p != None: print(p.data, end=" ") p = p.next def linkAppend(self, num): """ 在链表尾部追加节点 :param num: 数字转为节点中的数据 :return: """ self.tail.next = linkNode(num) self.tail = self.tail.next self.length += 1 def deletNum(self, num): """ 删除指定元素 :param num: :return: """ pre = self.head cur = pre.next temp=pre while temp != None and temp.data == num: temp = temp.next self.length -= 1 self.head=temp pre=temp while pre != None and cur!=None: while pre.data==num and pre!=None: pre=pre.next self.length-=1 cur=pre.next while cur!=None and cur.data==num: cur=cur.next self.length -= 1 pre.next = cur if cur==None: break pre=cur cur=cur.next n = int(input()) s = input().split() m = input() a = sigLink(s) a.deletNum(m) a.getlength() a.printlink()