• 创建一个链表


    1 问题

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

    2 方法

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

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

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

    代码清单 1

    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 结语

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

  • 相关阅读:
    hadoop项目之求出每年二月的最高气温(Combiner优化)
    java使用poi、itextpdf将word、ppt转为pdf文件,并对pdf文件加盖签章
    哈希表-算法总结
    企业有了BI,为什么还需要以指标为核心的ABI平台?
    CF Round 481 (Div. 3)--D. Almost Arithmetic Progression(思维)
    浅谈大数据算法
    光流法大全
    公交查询系统
    ppt录屏制作微课,轻松打造精品课程
    智能伪原创生成易语言代码
  • 原文地址:https://blog.csdn.net/gschen_cn/article/details/134257953