题解 | 【模板】链表

【模板】链表

https://www.nowcoder.com/practice/97dc1ac2311046618fd19960041e3c6f

import sys
class Node():

    """
    链表节点类
    """
    def __init__(self,data):
        self.data = data
        self.next = None
class Linklist:
    #链表类  
    def __init__(self):
        """
        item   一位数组,存放改链表的数组
        
        """
        self.len=0
        self.head = None
        self.last=None
        '''
        item=[]
        self.len=len(item)
        if self.len<=0:
            return
        i=0
        self.head=Node(item[i])
        self.last=self.head
        i+=1###此句不能少
        while i<self.len:
            self.last.next=Node(item[i])
            self.last=self.last.next
            i+=1
        '''
    '''
    def insert(self,data1,data2) :
        current = Node(self.head)
        node1=Node(data1)
        node2=Node(data2)
        if self.len==0:
                    self.head=node2
                    self.last=node2
        else:
            pre_node=Node(self.head)
            while current:
              if current.data == data1:
                data1.next.next=data2.next
                data1.next=data2
                break
              pre_node=current
              current = current.next
            pre_node.next=data2
            self.last=data2
        self.len+=1
    '''
    def insert(self, data1, data2):
       node1 = Node(data1)
       node2 = Node(data2)
    
       if self.len == 0:
          self.head = node2
          self.last = node2
       else:
          current = self.head
          pre_node = None
          while current:
            if current.data == data1:
                node2.next = current
                if pre_node is None:
                    self.head = node2
                else:
                    pre_node.next = node2
                if current == self.last:
                    self.last = node2
                break
            pre_node = current
            current = current.next
            # 如果没有找到 data1,则将 node2 插入到链表末尾
          else:
            pre_node.next = node2
            self.last = node2
       self.len += 1
    def delete(self, data):
    # 如果链表为空,直接返回
       if self.len ==0:
           return
    # 如果要删除的节点是头节点
       if self.head.data == data:
         self.head = self.head.next
         if self.head is None:
           self.last = None
         self.len -= 1
         return
    
    # 初始化前一个节点和当前节点
       pre_node = self.head
       current_node = self.head.next
    
    # 遍历链表,寻找要删除的节点
       while current_node is not None:
         if current_node.data == data:
            pre_node.next = current_node.next
            self.len -= 1
            return
         pre_node = current_node
         current_node = current_node.next         
        
                    
    
    def isempty(self):
        if self.len==0:
           return True
        else:
           return False

    def output(self):
         p=self.head
         while p is not None:
            print(p.data,end=' ')
            p=p.next

n=int(input())
linklist=Linklist()
for line in sys.stdin:
    a = line.split()
    if a[0]=='insert':
      linklist.insert(int(a[1]),int(a[2]))
    elif a[0]=='delete':
        if linklist.isempty():
            continue
        linklist.delete(int(a[1]))
if linklist.isempty():
    print("NULL")
else:
  linklist.output()




             
        
            


                    



全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务