链表
时间:2020-05-09
本文章向大家介绍链表,主要包括链表使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
定义
定义节点:数据域、指针域
class Node(object):
def __init__(self, data, next=None):
self.data = data
self.next = next
head指针指向的是第一个节点。
定义链表,及操作:
# 定义单链表:头指针、尾指针、链表长度
class linkOne(object):
def __init__(self):
# 头指针
self.head = None
# 尾指针
self.tail = None
# 元素个数,即链表长度
self.count = 0
def isEmpty(self):
# return self.count == 0
if self.count == 0:
return True
else:
return False
def size(self):
return self.count
# 添加节点到尾部:尾插法
def addElementToTail(self, data):
# 若尾指针不为空
if (self.tail != None):
# 新建一个节点并存入数据
temp = Node(data, None)
# 添加节点
self.tail.next = temp
# 尾指针后移
self.tail = temp
# 链表长度加1
self.count += 1
# 尾指针为空
else:
self.head = self.tail = Node(data, None)
self.count += 1
# 删除节点
def DeleteElementFromTail(self):
# 链表为空:头、尾指针都指向首节点
if (self.head == self.tail):
self.count = 0
self.head = self.tail = None
# 链表不为空
else:
temp = self.tail
t = self.head
while (t.next != self.tail):
t = t.next
self.tail = t
self.count -= 1
# del temp
return temp.data
lk = linkOne()
lk.addElementToTail(10)
lk.addElementToTail(20)
lk.addElementToTail(30)
lk.addElementToTail(40)
print(lk.size())
print(lk.tail.data)
print(lk.head.data, lk.head.next.data, lk.head.next.next.data)
print(lk.DeleteElementFromTail(), lk.tail.data)
Py和C实现链表的区别
python是动态语言,可以直接把对象赋值给新的变量。
在C/C++中,通常采用“指针+结构体”来实现链表;
而在Python中,则可以采用“引用+类”来实现链表。
如下图:
mylist = Node()
mylist.next = head
head指针指向的是第一个节点。
单链表头插法、尾插法
设node是待插入节点。
头插法:
node.next = head.next
head.next = node
尾插法:
while head.next:
head = head.next
head.next = node
头插法反转链表:
#新链表的头指针
pre = None
while head:
#暂存头指针指向节点的下一个节点
temp = head.next
#断开原链表,头插法接到新链表
head.next = pre
pre = head
head = temp
return pre
在指定位置(第index个位置)插入节点:
i = 0
cur_node = self.head.next
while i != index:
cur_node = cur_node.next
i += 1
node.next = cur_node.next
cur_node.next = node
原文地址:https://www.cnblogs.com/panweiwei/p/12856707.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter Widgets 之 AnimatedContainer
- Flutter Widgets 之 Opacity 和AnimatedOpacity
- 聊聊常见的服务(接口)认证授权
- Flutter Widgets 之 FutureBuilder
- [Hei-Ocelot-Gateway ].Net Core Api网关Ocelot的开箱即用版本
- Flutter Widgets 之 InkWell 和 Ink
- Flutter Widgets 之 BottomNavigationBar
- Flutter Widgets 之 PageView
- 笔试题:代码如何实现“百钱买百鸡”?
- Flutter Widgets 之 Dialog 对话框
- 全网最详细的一篇Flutter 尺寸限制类容器总结
- 一篇带你看懂Flutter叠加组件Stack
- Flutter 拖拽排序组件 ReorderableListView
- 女神节 | 程序员如何低调而又不失逼格
- Flutter 拖拽控件Draggable看这一篇就够了