单链表插入的实现
导语:在平时开发的项目中经常会用到LinkedList集合来存储数据,而LinkedList是基于链表结构来存储数据的,包括单向链表和双向链表。本片文章将着重详细介绍一下单链表的基本插入操作
链表:首先先来介绍一下单链表的基本结构,一个单链表的节点(Node)分为两部分,第一个部分保存或者显示结点的信息,另一个部分存储的是下一个结点的地址,每个结点对象维护一个 next 引用,next引用指向下一个节点对象,最后一个结点存储的地址的部分指向的是空值。
1.在链表的头结点前插入新的结点(删除头结点)
插入代码实现
//在链表头部添加元素
public Object addHead(Object obj){
Node newhead = new Node(obj);
if(size == 0){
head = newhead;
}else{
newhead.next = head;
head = newhead;
}
size++;
return obj;
}
插入代码分析
1.首先对原链表进行判空操作,如果原链表为空,则直接将新的结点赋给头结点
2.如果原链表不为空,那么将新结点下一个结点指向head
3.将新结点作为头结点
删除代码实现
//在单链表头部进行删除
public Object delHead(){
Object obj = head.data;
head = head.next;
size--;
return obj;
}
删除代码分析
1.将要删除头结点赋给obj,最后返回
2.将所删头结点的下一个结点作为新的头结点
3.最后链表的size-1,长度减1
2.在链表的中间结点插入新的结点(删除中间任意一结点)
插入代码实现
public Node InsertNode(Node newhead,Node pre){
//newhead表示要插入的新结点
//假设在ptr结点和nex结点中间插入
......
newhead.next=pre.next
pre.next = newhead
......
插入代码分析
1.新结点指向nex结点(即指向pre结点的下一个结点)
2.将pre结点的指针指向新结点
删除代码实现
public Node DelNode(Node delnode,Node pre){
//delnode表示要删除的结点
//删除pre后面的delnode结点
......
pre.next = delnode.next
......
}
删除代码分析
1.只需要将删除结点的上一个结点指向删除结点的下一个结点
3.在链表的尾结点后插入新的结点(删除尾部结点)
插入代码实现
public Object addTail(Object obj,Node pre){
//表示最后一个结点
Node newtail = new Node(obj);
if(size == 0){
head = newtail;
}else{
newhead.next = newtail;
}
size++;
return obj;
}
插入代码分析
1.直接将原链表的尾结点指向新的结点
删除代码实现
public Node DelNode(Node delnode,Node pre){
......
//pre:倒数第二个结点
pre.next = null;
......
}
删除代码分析
1.直接将倒数第二个结点指向null
结语:到此单链表的三种插入以及删除就介绍完了,如果不正,还请路过的朋友加以指正…