数据结构之python链表初入门

129 阅读1分钟

传统链表是一种由指针相互连接的数据结构

image.png

python链表与传统链表不同,在没有指针的情况下,变成一种对象套对象的数据结构,即套娃

图示

无标题.png

基本结构

```class ListNode:
   def __init__(self, val=0, next=None):
        self.val = val  #链表的数据
        self.next = none #代替指针存在的连接点,用来套下一个节点

打印效果如下(演示为一个三个节点的链表):

{val:date1,next:{val:date2,next:{val:date3,next:none}}}

创建链表

下面是用列表创建一个链表

```def ListNode_creat(list):
            node = ListNode()
            node0 = node
            for i in range(len(list)-1):
                node0.val = int(list[i])
                node0.next = ListNode()
                node0 = node0.next
            node0.val = int(list[-1])
            node0.next = None
            return node

遍历链表


```def ListNode_ergodic(ListNode):
            list = []
            while ListNode.next != None:
                list.append(ListNode.val)
                ListNode = ListNode.next
            list.append(ListNode.val)
            return list
            #这个方法就可以获得链表所有所有数据并储存在一个列表中

获取第n个节点的数据


```def ListNode_get(ListNode,n):
         for i in range(n-1):
             ListNode = ListNode.next
         date = ListNode.val
         return date      

头插一个节点

```def ListNode_head(date,ListNode):
       node = ListNode()
       node.val = date
       node.next = ListNode
       return ListNode

尾插一个节点

``` def ListNode_head(date,ListNode):
        while ListNode.next != None:           
              ListNode = ListNode.next
        node = ListNode()
        node.val = date
        ListNode.next = node
        return ListNode

在第n个节点后插入节点

```def  ListNode_insert(n,date,ListNode):
        node_front = ListNode
        node_behind = ListNode
        for i in range(n-1):
            node_front =node_front.next
        for i in range(n):
            node_behind = node_behind.next
        new_node = ListNode()
        new_node.val = date
        new_node.next = node_behind
        node_front.next = new_node    
        return ListNode

删除n个节点

```def  ListNode_insert(n,date,ListNode):
        node_front = ListNode
        node_behind = ListNode
        for i in range(n-2):
            node_front =node_front.next
        for i in range(n):
            node_behind = node_behind.next
        node_front.next = node_behind 
        return ListNode

合并两个链表

```def ListNode_head(ListNode1,ListNode2):
        node = ListNode1.next 
        while node.next != None:           
              node = node.next
        node.next = ListNode2
        return ListNode2