华为机试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

 

posted @ 2020-09-02 09:53  Andy_George  阅读(370)  评论(0编辑  收藏  举报