python:链表定义以及实现

发布时间:2019-08-12 09:52:11编辑:auto阅读(2743)

    链表(linked list)是一组数据项的集合,其中每个数据项都是一个节点的一部分,每个节点还包含指向下一个节点的链接.

    链表的数据结构如下图所示

    Image result for python 链表

    在链表中删除操作可以通过修改指针来实现,如下图所示:

    Image result for python 链表

    插入则是调整,插入点的前后两个指针的指向关系,如下图所示:

    Image result for python 链表


    但是和c不一样,python没有专门的指针概念,在python中每个变量都是指针,例如:

    用内置数据结构(list, dict, tuple等)的嵌套/组合,它们隐式地包含了指向/嵌套关系,如graph[u][v]={w0,w1..}
    类的成员变量、嵌套类可能包含了指向/嵌套关系;
    引用表示指向关系,只不过引用不能像指针一样运算,比如 p + 1 指向下一个元素,所以可能限制颇多
    因此,要实现链表的操作,不能和c一样直接对指针进行操作.

    链表实现

    实现链表总体需要两部

    1.定义链表:

    # Definition for singly-linked list.
    class ListNode(object):
        def __init__(self):
            self.val = None
            self.next = None

    2.对链表进行操作

    class ListNode_handle:
        def __init__(self):
            self.cur_node = None
    
        def add(self, data):
            #add a new node pointed to previous node
            node = ListNode()
            node.val = data
            node.next = self.cur_node
            self.cur_node = node
            return node
    
        def print_ListNode(self, node):
            while node:
                print '\nnode: ', node, ' value: ', node.val, ' next: ', node.next
                node = node.next
    
        def _reverse(self, nodelist):
            list = []
            while nodelist:
                list.append(nodelist.val)
                nodelist = nodelist.next
            result = ListNode()
            result_handle = ListNode_handle()
            for i in list:
                result = result_handle.add(i)
            return result

    其中对链表进行操作部分,大致是包括添加新的node, 反向排列链表, 打印链表.

    添加链表节点时候操作如下:

    假设有要完成链表操作为:

    ListNode_1
    链表是:

    l1 = ListNode()
    且需要吧1,8,3按1 -->8 -->3的顺序放入链表中,需要进行的操作则

        ListNode_1 = ListNode_handle()
        l1 = ListNode()
        l1_list = [1,8,3]
        for i in l1_list:
            l1 = ListNode_1.add(i)
    结果是:

    1 -->8 -->3


    调用反向排列链表方式如下:

    l1 = ListNode_1._reverse(l1)
    


    打印链表的操作如下:

    ListNode_1.print_ListNode(l1)

    GitHub: https://github.com/DinnerHowe/LeetCode.git

    参考:

    http://www.aspku.com/tech/jiaoben/python/83593.html

    知乎

关键字