# [数据结构与算法] 链表的其他类型

Github ： https://github.com/Alvin2580du/Data-Structures-and-Algorithms.git

# - * - coding:utf-8 - * -
"""定义节点类"""

class LNode:
def __init__(self, x, next_=None):
self.elem = x
self.next = next_

"""

"""

class LList:
def __init__(self):

def length(self):
count = 0  # 数目
# 当前节点
while current != None:
count += 1
# 当前节点往后移
current = current.next
return count

def is_empty(self):

def prepend(self, elem):

"""在链表头部添加元素"""

node = LNode(elem)
# 结点的next指针域指向头结点
# 头结点称为新的结点

def pop(self):
raise ValueError("in pop")
return e

# 后端操作
def append(self, elem):
# 当链表为空时
return
while current.next is not None:
current = current.next

current.next = LNode(elem)

def pop_last(self):
raise ValueError("in pop_last")
if p.next is None:
e = p.elem
return e
while p.next.next is not None:
p = p.next
e = p.next.elem
p.next = None
return e

def find(self, pred):
while p is not None:
if pred(p.elem):
return p.elem
p = p.next

def printall(self):
while p is not None:
if p.next is not None:
print(', ')
p = p.next

"""

"""

class LCList:
def __init__(self):

def is_empty(self):

# 求链表长度
def length(self):
if self.is_empty():
return 0
count = 1  # 数目
# 当前节点
# 当前节点的下一个节点不是头结点则继续增加
count += 1
# 当前节点往后移
current = current.next
return count

node = LNode(elem)
if self.is_empty():
# 空链表
node.next = node
else:
# 非空链表添加
# 查找最后一个节点
current = current.next
# 新节点的下一个节点为旧链表的头结点
# 新链表的头结点为新节点
# 最后节点的下一个节点指向新节点
current.next = node

def prepend(self, elem):
p = LNode(elem)
# 如果为空
p.next = p
else:

def append(self, elem):
self.prepend(elem)

def pop(self):
raise ValueError("in pop of CLList")
else:
return p.elem

# search(elem) 查找节点是否存在
def search(self, elem):
# 当前节点
if self.is_empty():
# 空链表直接返回False
return False
if current.elem == elem:
# 找到了
return True
else:
current = current.next
# 判断最后一个元素
if current.elem == elem:
return True
return False

def printall(self):
if self.is_empty():
return
while True:
print (p.elem)
break
p = p.next

"""定义双链表结点类，在LNode的基础上派生类"""

class DLNode(LNode):
def __init__(self, elem, prev=None, next_=None):
LNode.__init__(self, elem, next_)
self.prev = prev

"""

"""

class Double_LList(LList):
def __init__(self):
LList.__init__(self)

def is_empty(self):
# length() 链表长度

def length(self):
count = 0  # 数目
# 当前节点
while current != None:
count += 1
# 当前节点往后移
current = current.next
return count

node = DLNode(elem)
# 新节点的下一个节点为旧链表的头结点
# 新链表的头结点为新节点
# 下一个节点的上一个节点指向新增的节点
# 相当于是第一个结点指向新添加结点
node.next.prev = node

def prepend(self, elem):
else:
p.prev.prev = p

def append(self, elem):
else:
p.prev.next = p

def pop(self):
raise ValueError("in pop_last of DDList")
return e

def pop_last(self):
raise ValueError("in pop_last of DLList")

else:
return e

0 条评论

• ### [数据结构与算法] 链接表总结

上一次说到了顺序表，链接表和顺序表一样，也是线性表。那为什么有了线性表还要有链接表呢？总之就是当数据过大时，顺序表存在一些存储方面的限制，而链接表比顺序表要更有...

• ### [数据结构与算法] 线性表总结

线性表也是基本的数据结构之一，Python里面的list和tuple，就是线性表的一种实现。 首先什么是表呢，其实很简单，比如【元素1，元素2，。。。，元素n】...

• ### [编程经验]Python中的Lambda，Map， Reduce小结

今天要和大家分享的是Python匿名函数（anonymous functions），也叫lambda函数。匿名函数的意思就是说这个函数没有显式的函数名，因为一般...

• ### LEETCODE - Linked List 题目思路汇总

浏览了一下 Leetcode 上 Linked List 的题目，我把它分为 6 类： 调换顺序 删除 合并 环 变身 复制 做Leetcode还是要归类总结才...

• ### PyQt 的动作组(QActionGroup）

动作组(QActionGroup），是用于管理多个可选型动作(checkable QAction)的类，它可以保证组中所有的动作只要有一个“开”，则其他的所有动...

• ### 使用 python 进行微信好友分析

【特别提醒】：pyecharts 库用的是0.5.x版本，而在 pip 中安装的为1.x.x版本，因此需要自行到【官网】中下载。

• ### python 实现线性链表（单链表）

初学python，拿数据结构中的线性链表存储结构练练手，理论比较简单，直接上代码。

• ### 数据结构-栈的定义及python实现

class Node(object): def __init__(self,value): self.value=value ...

• ### python pyqt5 信号连接、断开、发射

from PyQt5.QtCore import QObject , pyqtSignal