python实现单链表的作用_python实现单链表

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()

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值