• 创建一个链表


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

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

  • 相关阅读:
    Spring知识点详解
    九、池化层
    打破焦虑!AI 时代的程序员为什么需要云端 IDE?
    【新知实验室】腾讯云TRTC初体验
    SpringBoot+Mybaits搭建通用管理系统实例九:基础增删改查功能实现上
    QT - 模型与视图
    【MySQL架构篇】逻辑架构
    Vue全家桶 Vuex的详细介绍
    带你学会指针进阶
    在React中使用Immutable.js
  • 原文地址:https://blog.csdn.net/gschen_cn/article/details/134257953