`
heavenzyc
  • 浏览: 688 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

python实现单链表

阅读更多


# coding:utf-8


class Node:
    def __init__(self, value):
        self.data = value
        self.next = None


class LinkList:
    def __init__(self, data=[0]):
        self.head = None
        self.init_link_list(data)

    # 初始化链表
    # data 为数组
    def init_link_list(self, data):
        if len(data) == 0:
            print("Initialization data is null")
            return
        self.head = Node(data[0])
        current = self.head
        for index in data[1:]:
            current.next = Node(index)
            current = current.next

    # 获取当前结点
    def get_node(self, index):
        if self.is_empty():
            print("link is empty")
            return
        if index > self.get_length() or index <= 0:
            print("node is not exist")
            return
        current = self.head
        i = 0
        while i < index:
            if i == index - 1:
                return current
            current = current.next
            i += 1

    # 获取当前元素的值
    def get_data(self, index):
        current = self.get_node(index)
        if current is None:
            return "node is not exist"
        return current.data

    # 打印链表
    def print_link(self):
        if self.is_empty():
            return
        list = []
        current = self.head
        while current.next is not None:
            list.append(current.data)
            current = current.next
        else:
            list.append(current.data)
        print(list)

    # 获取链表长度
    def get_length(self):
        if self.is_empty():
            return 0
        current = self.head
        count = 0
        while current.next is not None:
            count += 1
            current = current.next
        else:
            count += 1
        return count

    # 判断链表是否为空
    # 如果为空,返回true
    # 如果不为空,返回false
    def is_empty(self):
        return self.head is None

    # 当前元素之后插入一个元素
    # index 元素索引
    # data 插入的值
    def add_after(self, index, data):
        current = self.get_node(index)
        if current is None:
            return "node is not exist"
        current_next = current.next
        current.next = Node(data)
        current = current.next
        current.next = current_next

    # 在当前元素之前插入一个元素
    def add_before(self, index, data):
        if index == 1:
            current = self.get_node(index)
            self.head = Node(data)
            self.head.next = current
            return
        pre = self.get_pre_node(index)
        current = pre.next
        pre.next = Node(data)
        pre = pre.next
        pre.next = current

    # 获取当前元素的前一个元素
    def get_pre_node(self, index):
        if self.is_empty():
            print("link is empty")
            return
        if index > self.get_length() or index <= 1:
            print("node is not exist")
            return
        pre = self.head
        i = 0
        while i < index:
            if i == index - 2:
                return pre
            pre = pre.next
            i += 1

    # 删除指定元素,并返回删除元素的值
    def remove(self, index):
        if index == 1 and not self.is_empty():
            data = self.head.data
            self.head = self.head.next
            return data
        pre_node = self.get_pre_node(index)
        current = self.get_node(index)
        if pre_node is None or current is None:
            print("data is not exist")
        pre_node.next = current.next
        return current.data

    # 修改当前结点的值
    def update(self, index, data):
        current = self.get_node(index)
        if current is None:
            return "current node is none"
        current.data = data

    # 将新链表合并到当前链表
    def merge(self, data):
        size = self.get_length()
        last_node = self.get_node(size)
        last_node.next = data.head
        return self

# test
y = (1,2,3,4)
s = ["a", "b", "c", "d"]
linkList = LinkList(y)
# linkList.init_link_list(["a", "b", "c", "d"])
# second = LinkList()
# second.init_link_list(["x", "y", "z"])
# linkList.add_after(-1, "x")
# linkList.add_after(1, "y")
# linkList.init_link_list([])
# linkList.add_before(1,"x")
# linkList.print_link()
# print("item:", linkList.get_data(2))
# print("length:", linkList.get_length())
# print("is empty", linkList.is_empty())
# print(linkList.get_pre_node(3).data)
# print("remove node:",linkList.remove(2))
# linkList.merge(second)


linkList.print_link()
分享到:
评论

相关推荐

    python实现的单链表

    下面我们将深入探讨如何在Python中实现单链表,包括链表的初始化、增删改查以及链表的合并。 首先,我们创建一个名为`Node`的类,用于表示链表中的每个节点。这个类通常包含两个属性:`data`存储节点的数据,`next`...

    Python+单链表的基本操作代码

    Python实现单链表,适合初学者。 使用Python编程链表数据结构,可以使用类来实现单链表的基本操作,如下所示: # 这个程序定义了两个类:Node和LinkedList。 # Node类用于表示单链表中的每个节点,包含数据和指向下...

    数据结构与算法:Python实现单链表及其应用

    内容概要:本文详细介绍了单链表的 Python 实现方法,包括基本操作如 append(在链表末尾添加元素)、prepend(在链表头部添加元素)、delete(删除指定值的节点)、search(搜索指定值的节点)、display(打印链表...

    Python实现单链表、双链表、循环单链表、循环双链表、顺序表相关操作

    本文将深入探讨Python中四种不同类型的链表——单链表、双链表、循环单链表和循环双链表,以及顺序表的相关操作。 首先,**单链表** 是一种简单的数据结构,每个节点包含数据和一个指向下一个节点的指针。在Python...

    python实现单链表的逆置.md

    单链表的逆置

    python实现的单链表的基本操作和进阶操作

    1. Python实现单链表; 2. 确保可执行,并在文件中给出了案例与执行结果; 3. 单链表的操作:单链表构建,从头插入,从尾插入以及从指定位置插入与删除等操作; 4. .py文件展示了可执行的代码文件 5. 具体内容分析...

    单链表反转python实现代码

    单链表反转的python实现,简洁详细易于理解,附带注释易于分析

    python实现单链表中删除倒数第K个节点的方法

    本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码,供大家参考,具体内容如下 题目: 给定一个链表,删除其中倒数第k个节点。 代码: class LinkedListAlgorithms(object): def __init__...

    python如何实现单链表的反转

    在本篇内容中,我们将探讨如何用Python实现单链表的反转操作。 首先,我们需要创建一个表示链表节点的类`Node`: ```python class Node: def __init__(self, data=None, next=None): self.data = data self....

    Python单链表原理与实现方法详解

    Python实现单链表 关于链表 链表(Linked List)是由许多相同数据类型的数据项按照特定顺序排列而成的线性表。 链表中个数据项在计算机内存中的位置是不连续且随机的,数组在内存中是连续的。 链表数据的插入和...

    python版本单链表实现代码

    在本文中,我们将探讨如何在Python中实现单链表。单链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的引用(在Python中通常称为指针)。在Python中,由于没有原生的指针概念,...

    数据结构与算法(四):Python实现单链表的反转、环的检测、两个有序链表的合并、判断单向链表是否是回文字符串

    根据链表数据结构的知识,进行初步练习,从单链表的反转、环的检测、两个有序链表的合并、判断单向链表是否是回文字符串四个题目着手,分别进行代码实现。 首先定义单链表类: # 结点类 class Node(object): def _...

    单链表反转python实现代码示例

    单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur-&gt;next指向pre即可。 代码: class ListNode: def __init__(self,x): self...

    Python实现数据结构线性链表(单链表)算法示例

    在这个示例中,我们将详细讨论如何用Python实现单链表的定义、插入、删除、打印等基本操作。 首先,我们需要定义一个表示链表节点的类`Node`。这个类有两个属性:`data`用于存储数据,`next`用于指向下一个节点。`...

    SingleLinkList_python数据结构单链表函数_

    在这个"SingleLinkList_python数据结构单链表函数_"主题中,我们将深入探讨如何在Python中实现单链表及其核心操作。 首先,我们有两个文件:LList.py和LNode.py。LNode.py通常会定义链表的节点类,而LList.py将包含...

Global site tag (gtag.js) - Google Analytics