1 问题
创建链表过程中的过程可以简述为:如果发现头指针指向NULL,也就是链表此时为空,没有一个结点,那就让头指针指向这个结点;如果发现头指针已经指向一个结点了,即链表不为空,那么就通过遍历找到最后那个结点,让最后那个结点指向新创建的那个结点,也就是每次新创建的结点都在最后。
2 方法
1.声明一个头指针(如果有必要,可以声明一个头节点); 2.创建多个存储数据的节点,在创建的过程中,要随时与其前驱节点建立逻辑关系。
代码清单 1
class Node: def __init__(self, data): self.data = data self.next = None def get_data(self): return self.dataclass 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_dataif __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 结语
链表作为一种数据结构,它是用来存储数据的,举一个很形象的例子,就比如说以前玩的那个贪吃蛇,就是链表的一个很好的应用。在玩贪吃蛇的时候,食物就相当于一个新的结点,而在链表中,有很多对链表的操作,比如说:头插,尾插,排序插,中间插等等你可以想象成,将贪吃蛇吃到的食物是放在,头,尾,或者中间,或者按颜色的顺序进行排列,其实链表不难,理解了之后,写起来也是挺有意思的。