创建一个链表

2023-11-08 15:30:37 浏览数 (1)

1 问题

在数据结构的课堂上我们学习了关于单链表的许多知识,那么如何创建一个链表呢?

2 方法

链表:链表是由一系列节点组成的元素的集合。每个节点包含两部分,数据域item和指向下一个节点的指针next。通过节点之间的相互连接 ,最终串联成一个链表。 创建链表有两种方式:

头插法:先建立一个空链表,然后创建新结点,将输入的数据存放在新结点的数据域中,再将新结点插入到当前链表的表头,即头结点之后

尾插法:尾插法是将新结点插入到当前链表的表尾,为此必须增加一个尾指针r,使其始终指向当前链表的尾结点

代码清单 1

代码语言:javascript复制
class Node:
   def __init__(self, data):
       self.data = data
       self.next = None
   def get_data(self):
       return self.data
class List:
   def __init__(self, head):
       self.head = head
   def is_empty(self):
       return self.get_len() == 0
   def get_len(self):  
       length = 0
       temp = self.head
       while temp is not None:
           length  = 1
           temp = temp.next
       return length
   def append(self, node):
       temp = self.head
       while temp.next is not None:
           temp = temp.next
       temp.next = node
   def delete(self, index):
       if index < 1 or index > self.get_len():
           print("给定位置不合理")
           return
       if index == 1:
           self.head = self.head.next
           return
       temp = self.head
       cur_pos = 0
       while temp is not None:
           cur_pos  = 1
           if cur_pos == index-1:
               temp.next = temp.next.next
           temp = temp.next
   def insert(self, pos, node):
       if pos < 1 or pos > self.get_len():
           print("插入结点位置不合理")
           return
       temp = self.head
       cur_pos = 0
       while temp is not Node:
           cur_pos  = 1
           if cur_pos == pos-1:
               node.next = temp.next
               temp.next =node
               break
           temp = temp.next
   def reverse(self, head):
       if head is None and head.next is None:
           return head
       pre = head
       cur = head.next
       while cur is not None:
           temp = cur.next
           cur.next = pre
           pre = cur
           cur = temp
       head.next = None
       return pre
   def print_list(self, head):
       init_data = []
       while head is not None:
           init_data.append(head.get_data())
           head = head.next
       return init_data
if __name__=='__main__':
   head=Node('head')
   link=List(head)
   for i in range(10):
       node=Node(i)
       link.append(node)
   print(link.print_list(head))

3 结语

针对创建单链表的问题,提出使用头插法尾插法的方法,通过实验,证明该方法是有效的,未来可以继续研究有没有另外的方法可以更好的创建链表。

0 人点赞