链表简介
链表是一种线性数据结构,就如同链子那般串联而成,可通过链子的头部顺藤摸瓜找到下一个链段,如此套娃就形成了完整的链表。如果我们只是单纯的从头摸♂到尾那么这种链表被成为单向链表。如果可以来回摸索,反复穿梭,这种链表则被称为双向链表。当然,链表也能像项链那般围成圆形,这种链表被称为环形链表。
单向链表
单向链表是最基本的链表结构,由DATA数据和NEXT节点组成。DATA指的是存放的数据,而NEXT则指向下一个节点。链表一般还会有一个HEAD表头,HEAD指向链表的第一个节点,因为我们添加完所以节点后链表会指向链表尾部,而使用一般从表头开始使用,所以需要HEAD。
单向列表基本结构
//创建linked类
linked{
//data为存放于本节点的数据
String data ;
//next 类型为本类,用来存放添加的节点
linked next;
}
双向链表
双向链表跟单项列表大致结构一样,只不过多了一个pre节点,用来指向上一个节点。比如有这么一个需求,要求对链表进行逆序输出。单向列表执行这个操作将会很麻烦,但如果为其加一个pre节点,我们可以直接顺序遍历到尾部后,再通过pre节点遍历到头部,从而很方便的逆序输出。
双向列表基本结构
//创建linked类
doublelinked{
//data为存放于本节点的数据
String data ;
//pre类型为本类,用来存放链表的上一个节点
linked pre;
//next 类型为本类,用来存放新添加的节点
linked next;
}
环形链表
环形链表只不过是在链表基础上把尾部节点指向了头节点。让其成为了一个环形结构。
链表的增删查改
节点增加
链表增加节点只需要创建一个节点,然后把新节点赋值给旧节点的NEXT,然后再让新节点变成旧节点,循环往复。
//创建新节点
linked newLinked=New Linked()
//创建旧节点
linked frist=New Linked()
//将新节点赋值给旧节点
frist.NEXT= newLinked
//新节点变成旧节点
frist=newLinked
节点删除
通过循环遍历节点的NEXT,找到节点后,将该节点的NEXT指向NEXT节点的NEXT。具体过程如下:
cur=linked;
whlie(True){
if(cur ==null)
break;
if(cur.NEXT.DATA=="目标数据"){
cur.NEXT=cur.NEXT.NEXT
break;
}
cur=cur.NEXT
}
节点查找
通过循环遍历节点的NEXT,直到找到目标节点的DATA为止。具体过程如下:
cur=linked.NEXT;
whlie(True){
if(cur ==null)
break;
if(cur.DATA=="目标数据")
break;
cur=cur.NEXT
}
节点修改
通过循环遍历节点的NEXT,找到节点的DATA后对其进行修改即可。具体过程如下:
cur=linked.NEXT;
whlie(True){
if(cur ==null)
break;
if(cur.DATA=="目标数据"){
cur.DATA=="要修改的数据"
break;
}
cur=cur.NEXT
}
结语
链表也是比较简单的数据结构,只要考察链表的遍历。