python 链表的基本操作问题

关于python链表的运行_百度知道
关于python链表的运行
6-&data'next'7-&8-&3-&gt这是一个链表;2-&头
1-&]pointer['next']=none运行之后链表变成啥样;4-&9
NONEpointer=headnewnode={ }newnode['5-&]=20newnode[']=pointerhead=newnodepointer=pointer['next&#39
提问者采纳
3-&gt看你运行几次, ‘next’,也就是现在pointer这个链表就被截断了;]=pointer
#字典的next目标指向2-&gt,也就是1;next'data&#39,1newnode={ }
#空字典newnode['9
NONEpointer=head
#这里你没说清,也就是pointer现在指向链表的第二个;next'2-&7-&]=none
#pointer[']设为next&#39,我给你一条一条说头
1-&];4-&gt,也就是head:20;next&#39,但是是链表这个object,不是指向一个数字head=newnode
#重新定义head为newnode这个字典,我先假设这个head是链表的第一个;5-&next&#39。pointer=pointer[']
#pointer指向pointer[&#39。head指向{‘data’。只包含1-&6-&]=20
#添加关键字data=20进字典;8-&gt。newnode[&#39,2pointer[&#39:pointer}这个字典
只运行一次!变成1-&2-&none吗
才看到你的追问pointer现在只包含2-&None原来的链表对象head变成了{‘data’:20, ‘next’:pointer}。也就是所原来的链表对象变成了20-&2-&None
提问者评价
来自团队:
其他类似问题
为您推荐:
python的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁页面导航:
→ 正文内容 python单链表实现
python单链表实现代码实例
这篇文章主要介绍了python单链表实现代码,大家参考使用吧
链表的定义:链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址。由于每个结点都包含了可以链接起来的地址信息,所以用一个变量就能够访问整个结点序列。也就是说,结点包含两部分信息:一部分用于存储数据元素的值,称为信息域;另一部分用于存储下一个数据元素地址的指针,称为指针域。链表中的第一个结点的地址存储在一个单独的结点中,称为头结点或首结点。链表中的最后一个结点没有后继元素,其指针域为空。  
python单链表实现代码:
代码如下:#!/usr/bin/python# -*- coding: utf-8 -*-
class Node(object):&&& def __init__(self,val,p=0):&&&&&&& self.data = val&&&&&&& self.next = p
class LinkList(object):&&& def __init__(self):&&&&&&& self.head = 0
&&& def __getitem__(self, key):
&&&&&&& if self.is_empty():&&&&&&&&&&& print 'linklist is empty.'&&&&&&&&&&& return
&&&&&&& elif key &0& or key & self.getlength():&&&&&&&&&&& print 'the given key is error'&&&&&&&&&&& return
&&&&&&& else:&&&&&&&&&&& return self.getitem(key)
&&& def __setitem__(self, key, value):
&&&&&&& if self.is_empty():&&&&&&&&&&& print 'linklist is empty.'&&&&&&&&&&& return
&&&&&&& elif key &0& or key & self.getlength():&&&&&&&&&&& print 'the given key is error'&&&&&&&&&&& return
&&&&&&& else:&&&&&&&&&&& self.delete(key)&&&&&&&&&&& return self.insert(key)
&&& def initlist(self,data):
&&&&&&& self.head = Node(data[0])
&&&&&&& p = self.head
&&&&&&& for i in data[1:]:&&&&&&&&&&& node = Node(i)&&&&&&&&&&& p.next = node&&&&&&&&&&& p = p.next
&&& def getlength(self):
&&&&&&& p =& self.head&&&&&&& length = 0&&&&&&& while p!=0:&&&&&&&&&&& length+=1&&&&&&&&&&& p = p.next
&&&&&&& return length
&&& def is_empty(self):
&&&&&&& if self.getlength() ==0:&&&&&&&&&&& return True&&&&&&& else:&&&&&&&&&&& return False
&&& def clear(self):
&&&&&&& self.head = 0
&&& def append(self,item):
&&&&&&& q = Node(item)&&&&&&& if self.head ==0:&&&&&&&&&&& self.head = q&&&&&&& else:&&&&&&&&&&& p = self.head&&&&&&&&&&& while p.next!=0:&&&&&&&&&&&&&&& p = p.next&&&&&&&&&&& p.next = q
&&& def getitem(self,index):
&&&&&&& if self.is_empty():&&&&&&&&&&& print 'Linklist is empty.'&&&&&&&&&&& return&&&&&&& j = 0&&&&&&& p = self.head
&&&&&&& while p.next!=0 and j &index:&&&&&&&&&&& p = p.next&&&&&&&&&&& j+=1
&&&&&&& if j ==index:&&&&&&&&&&& return p.data
&&&&&&& else:
&&&&&&&&&&& print 'target is not exist!'
&&& def insert(self,index,item):
&&&&&&& if self.is_empty() or index&0 or index &self.getlength():&&&&&&&&&&& print 'Linklist is empty.'&&&&&&&&&&& return
&&&&&&& if index ==0:&&&&&&&&&&& q = Node(item,self.head)
&&&&&&&&&&& self.head = q
&&&&&&& p = self.head&&&&&&& post& = self.head&&&&&&& j = 0&&&&&&& while p.next!=0 and j&index:&&&&&&&&&&& post = p&&&&&&&&&&& p = p.next&&&&&&&&&&& j+=1
&&&&&&& if index ==j:&&&&&&&&&&& q = Node(item,p)&&&&&&&&&&& post.next = q&&&&&&&&&&& q.next = p
&&& def delete(self,index):
&&&&&&& if self.is_empty() or index&0 or index &self.getlength():&&&&&&&&&&& print 'Linklist is empty.'&&&&&&&&&&& return
&&&&&&& if index ==0:&&&&&&&&&&& q = Node(item,self.head)
&&&&&&&&&&& self.head = q
&&&&&&& p = self.head&&&&&&& post& = self.head&&&&&&& j = 0&&&&&&& while p.next!=0 and j&index:&&&&&&&&&&& post = p&&&&&&&&&&& p = p.next&&&&&&&&&&& j+=1
&&&&&&& if index ==j:&&&&&&&&&&& post.next = p.next
&&& def index(self,value):
&&&&&&& if self.is_empty():&&&&&&&&&&& print 'Linklist is empty.'&&&&&&&&&&& return
&&&&&&& p = self.head&&&&&&& i = 0&&&&&&& while p.next!=0 and not p.data ==value:&&&&&&&&&&& p = p.next&&&&&&&&&&& i+=1
&&&&&&& if p.data == value:&&&&&&&&&&& return i&&&&&&& else:&&&&&&&&&&& return -1
l = LinkList()l.initlist([1,2,3,4,5])print l.getitem(4)l.append(6)print l.getitem(5)
l.insert(4,40)print l.getitem(3)print l.getitem(4)print l.getitem(5)
l.delete(5)print l.getitem(5)
l.index(5)
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910当前位置:&&
数据结构:图(有向图,无向图),在Python中的表示和实现代码示例
&&&&发布时间:&&
&&&&数据结构:图(有向图,无向图),在Python中的表示和实现代码示例(本文由搜集整理)一、图的存储结构1.1 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数...
&数据结构:图(有向图,无向图),在Python中的表示和实现代码示例(本文由搜集整理)一、图的存储结构1.1 邻接矩阵& &图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。无向图的边数组是一个对称矩阵。所谓对称矩阵就是n阶矩阵的元满足aij = aji。即从矩阵的左上角到右下角的主对角线为轴,右上角的元和左下角相对应的元全都是相等的。& & 从这个矩阵中,很容易知道图中的信息。& & (1)要判断任意两顶点是否有边无边就很容易了;& & (2)要知道某个顶点的度,其实就是这个顶点vi在邻接矩阵中第i行或(第i列)的元素之和;& & (3)求顶点vi的所有邻接点就是将矩阵中第i行元素扫描一遍,arc[i][j]为1就是邻接点;& & 而有向图讲究入度和出度,顶点vi的入度为1,正好是第i列各数之和。顶点vi的出度为2,即第i行的各数之和。1.2 邻接表& & 邻接矩阵是不错的一种图存储结构,但是,对于边数相对顶点较少的图,这种结构存在对存储空间的极大浪费。因此,找到一种数组与链表相结合的存储方法称为邻接表。& & 邻接表的处理方法是这样的:& & (1)图中顶点用一个一维数组存储,当然,顶点也可以用单链表来存储,不过,数组可以较容易的读取顶点的信息,更加方便。& & (2)图中每个顶点vi的所有邻接点构成一个线性表,由于邻接点的个数不定,所以,用单链表存储,无向图称为顶点vi的边表,有向图则称为顶点vi作为弧尾的出边表。1.3 十字链表& & 对于有向图来说,邻接表是有缺陷的。关心了出度问题,想了解入度就必须要遍历整个图才知道,反之,逆邻接表解决了入度却不了解出度情况。十字链表(Orthogonal List)是有向图的一种存储方法,它实际上是邻接表与逆邻接表的结合,即把每一条边的边结点分别组织到以弧尾顶点为头结点的链表和以弧头顶点为头顶点的链表中。二、图在Python中的表示& &几乎没有编程语言把图作为一项直接支持的数据类型,Python也不例外。然而,图很容易通过列表和词典来构造。比如说,这有一张简单的图: A&-&&B
 F&-&&C这个图有6个节点(A-F)和8个弧。它可以通过下面的Python数据结构来表示:graph&=&{'A':&['B',&'C'],
&&&&&&&&&&&&&'B':&['C',&'D'],
&&&&&&&&&&&&&'C':&['D'],
&&&&&&&&&&&&&'D':&['C'],
&&&&&&&&&&&&&'E':&['F'],
&&&&&&&&&&&&&'F':&['C']}& & 这是一个词典,每个key都是图的节点。每个key都对应一个列表,列表里面存的是直接通过一个弧和这个节点连接的节点。这个图非常简单了,不过更简单的是用数字来代替字母来表示一个节点。不过用名字(字母)来表示很方便,而且也便于扩展,比如可以改成城市的名字等等。我们来写一个函数来判断两个节点间的路径。它的参数是一个图、一个起始节点和一个终点。它会返回一个列表,列表里面存有组成这条路径的节点(包括起点和终点)。如果两个节点之间没有路径的话,那就返回None。相同的节点不会在返回的路径中出现两次或两次以上(就是说不会包括环)。这个算法用到了一个很重要的技术,叫做回溯:它会去尝试每一种可能,直到找到结果。def&find_path(graph,&start,&end,&path=[]):
&&&&&&&&path&=&path&+&[start]
&&&&&&&&if&start&==&end:
&&&&&&&&&&&&return&path
&&&&&&&&if&not&graph.has_key(start):
&&&&&&&&&&&&return&None
&&&&&&&&for&node&in&graph[start]:
&&&&&&&&&&&&if&node&not&in&path:
&&&&&&&&&&&&&&&&newpath&=&find_path(graph,&node,&end,&path)
&&&&&&&&&&&&&&&&if&newpath:&return&newpath
&&&&&&&&return&None运行的结果(上面的那张图):&&&&find_path(graph,&'A',&'D')
  ['A',&'B',&'C',&'D']
&&&代码中的第二个if(译者注:是指if not graph.has_key(start):这句)仅仅在遇到一类 特殊的节点的时候才有用,这类节点有其他的节点指向它,但是它没有任何弧指向其他的节点,所以就并不会在图这个词典中作为key被列出来。也可以这样来处 理,即这个节点也作为一个key,但是有一个空的列表来表示其没有指向其他节点的弧,不过不列出来会更好一些。注意,当我们调用find_graph()的时候,使用了3个参数,但是实际上使用了4个参数:还有一个是当前已经走过的路径。这个参数的默认值是 一个空列表,“[]”,表示还没有节点被访问过。这个参数用来避免路径中存在环(for循环中的第一个if语句)。path这个参数本身不会修改,我们用 “path = path +&[start]”只是创建了一个新的列表。如果我们使用“path.append(start)”的话,那我们就修改了path的值,这样会产生灾难性后 果了。如果使用元组的话,我们可以保证这个是不会发生的。在使用的时候要写“path = path + (start,)”,注意“(start)”并不是一个单体元组,只是一个括号表达式而已。很容易修改这个函数来实现返回一个节点到另一个节点的所有路径,而不仅仅只查找第一条路径:def&find_all_paths(graph,&start,&end,&path=[]):
path&=&path&+&[start]
&&&&&&&&if&start&==&end:
&&&&&&&&&&&&return&[path]
&&&&&&&&if&not&graph.has_key(start):
&&&&&&&&&&&&return&[]
&&&&&&&&paths&=&[]
&&&&&&&&for&node&in&graph[start]:
&&&&&&&&&&&&if&node&not&in&path:
&&&&&&&&&&&&&&&&newpaths&=&find_all_paths(graph,&node,&end,&path)
&&&&&&&&&&&&&&&&for&newpath&in&newpaths:
&&&&&&&&&&&&&&&&&&&&paths.append(newpath)
&&&&&&&&return&paths&&&&find_all_paths(graph,&'A',&'D')
  [['A',&'B',&'C',&'D'],&['A',&'B',&'D'],&['A',&'C',&'D']]
&&&还可以改成查找最短路径:
def&find_shortest_path(graph,&start,&end,&path=[]):
&&&&&&&&path&=&path&+&[start]
&&&&&&&&if&start&==&end:
&&&&&&&&&&&&return&path
&&&&&&&&if&not&graph.has_key(start):
&&&&&&&&&&&&return&None
&&&&&&&&shortest&=&None
&&&&&&&&for&node&in&graph[start]:
&&&&&&&&&&&&if&node&not&in&path:
&&&&&&&&&&&&&&&&newpath&=&find_shortest_path(graph,&node,&end,&path)
&&&&&&&&&&&&&&&&if&newpath:
&&&&&&&&&&&&&&&&&&&&if&not&shortest&or&len(newpath)&&&len(shortest):
&&&&&&&&&&&&&&&&&&&&&&&&shortest&=&newpath
&&&&&&&&return&shortest运行结果:&&&&find_shortest_path(graph,&'A',&'D')
  ['A',&'C',&'D']这些函数都非常简单,但是却已经接近最优了(用Python写成的代码中)。在另一篇文章中,我将尝试去分析它们的运行速度,并改进它们的性能。另外还可以引入更多的数据抽象:用一个类来表示一个图,并通过各种方法来实现各种算法。如果通过结构化编程来做这个事情的话,其实对代码的效率提升没什么帮助(有时恰恰相反)。很容易把节点或者弧加上一个命名,就可以来解决实际问题了(比如在地图上查找两个城市中的最短路)。& & Python的图邻接矩阵法做为存储结构,0表示没有边,1表示有边。具体代码如下:#邻接矩阵结构:()
#&&&&&&&map[][]&=&{
#&&&&-1,1,0,0,1,0,0,0
#&&&&0,-1,0,0,0,0,0,0
#&&&&0,0,-1,0,0,0,0,0
#&&&&0,0,0,-1,0,0,0,0
#&&&&0,0,0,0,-1,0,0,0
#&&&&0,0,0,0,0,-1,0,0
#&&&&0,0,0,0,0,0,-1,0
#&&&&0,0,0,0,0,0,0,-1
class&Graph:
&&&&def&__init__(self,&maps&=&[],&nodenum&=&0,&edgenum&=&0):
&&&&&&&&self.map&=&maps&&&&&&&#图的矩阵结构
&&&&&&&&self.nodenum&=&len(maps)
&&&&&&&&self.edgenum&=&edgenum
&&&&&#&&&self.nodenum&=&GetNodenum()#节点数
&&&&&#&&self.edgenum&=&GetEdgenum()#边数
&&&&def&isOutRange(self,&x):
&&&&&&&&try&:
&&&&&&&&&&&&if&x&&=&self.nodenum&or&x&&=&0:
&&&&&&&&&&&&&&&&raise&&IndexError
&&&&&&&&except&IndexError:
&&&&&&&&&&&&print(&节点下标出界&)
&&&&&&&&&&&&
&&&&def&GetNodenum(self):
&&&&&&&&self.nodenum&=&len(self.map)
&&&&&&&&return&self.nodenum
&&&&def&GetEdgenum(self):
&&&&&&&&GetNodenum()
&&&&&&&&self.edgenum&=&0
&&&&&&&&for&i&in&range(self.nodenum):
&&&&&&&&&&&&for&j&in&range(self.nodenum):
&&&&&&&&&&&&&&&&if&self.map[i][j]&is&1:
&&&&&&&&&&&&&&&&&&&&self.edgenum&=&self.edgenum&+&1
&&&&&&&&return&self.edgenum
&&&&def&InsertNode(self):
&&&&&&&&for&i&in&range(self.nodenum):
&&&&&&&&&&&&self.map[i].append(0)
&&&&&&&&self.nodenum&=&self.nodenum&+&1
&&&&&&&&ls&=&[0]&*&self.nodenum
&&&&&&&&self.map.append(ls)
&&&&#假删除,只是归零而已
&&&&def&DeleteNode(self,&x):&&&&&&&&
&&&&&&&&for&i&in&range(self.nodenum):
&&&&&&&&&&&&if&self.map[i][x]&is&1:
&&&&&&&&&&&&&&&&self.map[i][x]&=&0
&&&&&&&&&&&&&&&&self.edgenum&=&self.edgenum&-1
&&&&&&&&&&&&if&self.map[x][i]&is&1:
&&&&&&&&&&&&&&&&self.map[x][i]&=&0
&&&&&&&&&&&&&&&&self.edgenum&=&self.edgenum&-&1
&&&&&&&&&&&&&&&&
&&&&def&AddEdge(self,&x,&y):
&&&&&&&&if&self.map[x][y]&is&0:
&&&&&&&&&&&&self.map[x][y]&=&1
&&&&&&&&&&&&self.edgenum&=&self.edgenum&+&1
&&&&def&RemoveEdge(self,&x,&y):
&&&&&&&&if&self.map[x][y]&is&0:
&&&&&&&&&&&&self.map[x][y]&=&1
&&&&&&&&&&&&self.edgenum&=&self.edgenum&+&1
&&&&&&&&&&&&
&&&&def&BreadthFirstSearch(self):
&&&&&&&&def&BFS(self,&i):
&&&&&&&&&&&&print(i)
&&&&&&&&&&&&visited[i]&=&1
&&&&&&&&&&&&for&k&in&range(self.nodenum):
&&&&&&&&&&&&&&&&if&self.map[i][k]&==&1&and&visited[k]&==&0:
&&&&&&&&&&&&&&&&&&&&BFS(self,&k)
&&&&&&&&&&&&&&&&
&&&&&&&&visited&=&[0]&*&self.nodenum
&&&&&&&&for&i&in&range(self.nodenum):
&&&&&&&&&&&&if&visited[i]&is&0:
&&&&&&&&&&&&&&&&BFS(self,&i)
&&&&def&DepthFirstSearch(self):
&&&&&&&&def&DFS(self,&i,&queue):
&&&&&&&&&&&&
&&&&&&&&&&&&queue.append(i)&
&&&&&&&&&&&&print(i)
&&&&&&&&&&&&visited[i]&=&1
&&&&&&&&&&&&if&len(queue)&!=&0:
&&&&&&&&&&&&&&&&w&=&queue.pop()
&&&&&&&&&&&&&&&&for&k&in&range(self.nodenum):
&&&&&&&&&&&&&&&&&&&&if&self.map[w][k]&is&1&and&visited[k]&is&0:
&&&&&&&&&&&&&&&&&&&&&&&&DFS(self,&k,&queue)
&&&&&&&&visited&=&[0]&*&self.nodenum
&&&&&&&&queue&=&[]
&&&&&&&&for&i&in&range(self.nodenum):
&&&&&&&&&&&&if&visited[i]&is&0:
&&&&&&&&&&&&&&&&DFS(self,&i,&queue)&
def&DoTest():
&&&&maps&=&[
&&&&&&&&[-1,&1,&0,&0],
&&&&&&&&[0,&-1,&0,&0],
&&&&&&&&[0,&0,&-1,&1],
&&&&&&&&[1,&0,&0,&-1]]
&&&&G&=&Graph(maps)
&&&&G.InsertNode()
&&&&G.AddEdge(1,&4)
&&&&print(&广度优先遍历&)
&&&&G.BreadthFirstSearch()
&&&&print(&深度优先遍历&)
&&&&G.DepthFirstSearch()
if&__name__&==&'__main__':
&&&&DoTest()
169IT站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.转载请注明:文章转载自:[]本文标题:
本类别最新文章推荐:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!
(C)2012-,站长邮箱:www_169it_(请将#改为@)python的双向链表_百度知道
python的双向链表
可是我不会做……我知道有head和tail.next, self,可以随意的插入和删除链表里的东西……我学的是初级课程应该不太难吧.prev然后需要再建一个linkedlist class。def add(value.data, index)和def remove(value建了一个Node class, self,然后呢……可以教教我吗,里面有我的self
提问者采纳
提问者评价
来自团队:
其他类似问题
为您推荐:
其他1条回答
不建议在python上练习链表,例如最简单的学习链表,l[1](链表方式) l.insert() l:l = []l,(数组方式) l[0].append(1)l.push() l.remove()总之.append(2)访问方式,建议还是从C语言开始.pop() l,其中很多格式可以完美的实现链表操作,为操作方便python中早已封装定义好了自己的数据格式,python中有更多方便的替代方法
我学的就是python……还有我说的是链表,不是列表。
双向链表的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁[操作系统] &&&&&&&&&&
[程序开发] &&&&&&&&&&&&
[IT运维] &&&&&&
[综合交流] &&&&&&
·············································
主题: 4198帖数: 21477
主题: 7219帖数: 41782
主题: 83801帖数: 380579
主题: 11144帖数:
主题: 1868帖数: 8357
主题: 20182帖数: 100670
主题: 13034帖数: 64342
主题: 50250帖数: 199859
主题: 49524帖数: 170549
主题: 6112帖数: 28219
主题: 3127帖数: 11381
主题: 200帖数: 554
主题: 181413帖数:
主题: 122129帖数: 666755
主题: 10284帖数: 54488
主题: 45944帖数: 290870
主题: 46881帖数: 237343
主题: 14083帖数: 94158
主题: 79981帖数: 450433
主题: 19839帖数: 99494
主题: 48912帖数: 247958
主题: 8593帖数: 15034
主题: 2508帖数: 14553
主题: 77719帖数: 659855
主题: 15088帖数: 67145
主题: 24732帖数: 148886
主题: 58841帖数: 490852
主题: 23246帖数: 158457
主题: 32942帖数: 87295
主题: 27890帖数: 116232
主题: 13462帖数: 67183
主题: 1141帖数: 5790
主题: 8995帖数: 46341
主题: 3311帖数: 17934
主题: 8447帖数: 19811
主题: 253帖数: 3732
主题: 1965帖数: 14617
主题: 3302帖数: 14048
主题: 64帖数: 586
主题: 279帖数: 1510
主题: 29181帖数: 109144
主题: 15670帖数: 76687
主题: 38957帖数: 174644
主题: 2950帖数: 12599
主题: 8666帖数: 36477
主题: 13820帖数: 69095
主题: 625帖数: 2119
主题: 826帖数: 4864
主题: 8764帖数: 16694
主题: 76176帖数:
主题: 2483帖数: 21073
主题: 19223帖数: 43398
主题: 1486帖数: 108358
主题: 11405帖数: 112487
主题: 2647帖数: 12183
主题: 3714帖数: 72778
主题: 865帖数: 3414
篇帖子(其中 1457531 篇主题) 今日发帖量为 171 篇&&
最新注册的会员是
[ 管理员 ] & [ 版主 ] & [ 实习版主 ]
→ CHINAUNIX热词专题 ← &&&&
&&&&&&&&&&&&&&&&&&&&
北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处

我要回帖

更多关于 链表的基本操作 的文章

 

随机推荐