链表是一种数据结构,由一组节点(node)组成,这些节点一起表示一个序列。在最简单的形式下,每个顶点都由一个数据和对序列中下一个顶点的引用(链接)组成。
链表及其变体被用作实现List、Stack、Queue和Deque ADT的底层数据结构,我们将讨论了带有单个下一个指针的(Singly)链表(LL)及其两种变体:堆栈和队列,以及带有下一个和上一个指针和其变体双向队列Deque的双向链表(DLL)。
一、List
创建
// 创建一个list
List list = new ArrayList();
list.add(7);
list.add(12);
list.add(18);
list.add(29);
list.add(36);
这个链表由5个节点构成,每个节点上的值为:7,12,18,29,36,他们的指针(下标)分别为:0,1,2,3,4。
搜索
当我们查找某一个元素的时候。
如果为空,返还 未找到
index = 0, tmp = head
while (tmp.item != v)
index++, tmp = tmp.next
if tmp == null
返还 未找到
返还 索引
删除
删除头部
tmp = head
head = head.next
delete tmp
删除尾部
node pre = head
tmp = head.next
while (tmp.next != null)
pre = pre.next
pre.next = null
delete tmp, tail = pre
删除中间节点
node pre = head
for (k = 0; k < i-1; k++)
pre = pre.next
node del = pre.next,aft=del.next
pre.next=aft //跳过 del
删除del
插入
头部插入
node temp = new Node(input)
temp.next = head
head=temp
尾部插入
node temp = new node(input)
tail.next=temp
tail=temp
中间部分插入
node pre = head
for (k = 0; k < i-1; k++)
temp1 = temp1.next
node aft = pre.next
node vtx= new node(v)
vtx.next = aft
pre.next = vtx