# 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中实现单链表,包括链表的初始化、增删改查以及链表的合并。 首先,我们创建一个名为`Node`的类,用于表示链表中的每个节点。这个类通常包含两个属性:`data`存储节点的数据,`next`...
Python实现单链表,适合初学者。 使用Python编程链表数据结构,可以使用类来实现单链表的基本操作,如下所示: # 这个程序定义了两个类:Node和LinkedList。 # Node类用于表示单链表中的每个节点,包含数据和指向下...
本文将深入探讨Python中四种不同类型的链表——单链表、双链表、循环单链表和循环双链表,以及顺序表的相关操作。 首先,**单链表** 是一种简单的数据结构,每个节点包含数据和一个指向下一个节点的指针。在Python...
单链表的逆置
1. Python实现单链表; 2. 确保可执行,并在文件中给出了案例与执行结果; 3. 单链表的操作:单链表构建,从头插入,从尾插入以及从指定位置插入与删除等操作; 4. .py文件展示了可执行的代码文件 5. 具体内容分析...
单链表反转的python实现,简洁详细易于理解,附带注释易于分析
本文实例为大家分享了python实现单链表中删除倒数第K个节点的具体代码,供大家参考,具体内容如下 题目: 给定一个链表,删除其中倒数第k个节点。 代码: class LinkedListAlgorithms(object): def __init__...
在本篇内容中,我们将探讨如何用Python实现单链表的反转操作。 首先,我们需要创建一个表示链表节点的类`Node`: ```python class Node: def __init__(self, data=None, next=None): self.data = data self....
Python实现单链表 关于链表 链表(Linked List)是由许多相同数据类型的数据项按照特定顺序排列而成的线性表。 链表中个数据项在计算机内存中的位置是不连续且随机的,数组在内存中是连续的。 链表数据的插入和...
在本文中,我们将探讨如何在Python中实现单链表。单链表是一种基本的数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的引用(在Python中通常称为指针)。在Python中,由于没有原生的指针概念,...
根据链表数据结构的知识,进行初步练习,从单链表的反转、环的检测、两个有序链表的合并、判断单向链表是否是回文字符串四个题目着手,分别进行代码实现。 首先定义单链表类: # 结点类 class Node(object): def _...
单链表的反转可以使用循环,也可以使用递归的方式 1.循环反转单链表 循环的方法中,使用pre指向前一个结点,cur指向当前结点,每次把cur->next指向pre即可。 代码: class ListNode: def __init__(self,x): self...
在这个示例中,我们将详细讨论如何用Python实现单链表的定义、插入、删除、打印等基本操作。 首先,我们需要定义一个表示链表节点的类`Node`。这个类有两个属性:`data`用于存储数据,`next`用于指向下一个节点。`...
在这个"SingleLinkList_python数据结构单链表函数_"主题中,我们将深入探讨如何在Python中实现单链表及其核心操作。 首先,我们有两个文件:LList.py和LNode.py。LNode.py通常会定义链表的节点类,而LList.py将包含...
在编程中,单链表通常用类或结构体来实现,包括节点类和链表类。例如,Python中的实现如下: ```python class Node: def __init__(self, data=None): self.data = data self.next = None class LinkedList: ...