java链表需要自己编写么_基于java的链表基础操作

链表结构是由一个或一个以上再内存上不连续存储的元素结点连接而成的数据结构,链表的每个结点都有两个部分,一个部分是存储的数据,另一部分是指向下一结点的指针,既是下一节点的引用。

首先链表一定有一个头结点,它是链表的第一个结点,他是链表的第一个结点,该结点的引用部分指向下一节点,下一结点引用部分指向下下一结点 。。。。直到最后一个结点,最后一个结点引用部分为空,标志着链表的结束,整个存储形式呈一个长链状

链表的基础操作分为 追加结点 遍历结点 删除结点 插入结点等

首先是链表结点类

public class LinearList {

//链表数据部分

int i;

//链表指针,既是链表对下一节点的引用

LinearList nextNode;

}

追加结点

/**

* 链表末尾追加节点

* @param head (头节点)

* @param i (追加节点的值)

* @return

*/

static int add(LinearList head,int i){

//判断头节点有没有初始化

if(head == null){

return 0;

}

//保存头节点引用

LinearList temp = head;

//实例化追加节点,保存最佳节点数据

LinearList addNode = new LinearList();

addNode.i = i;

addNode.nextNode = null;

/**

* 循环至链表最后一个节点

*/

while(temp.nextNode!=null){

temp = temp.nextNode;

}

//链表最后一个节点的指针指向追加的节点

temp.nextNode = addNode;

return 1;

}

遍历结点

/**

* 遍历链表的所有结点

* @param head

*/

static void printNode(LinearList head){

if (head == null){

return;

}

while(head != null){

System.out.println("正在遍历:"+head.i);

//该结点操作完成,指针下移到下一节点

head = head.nextNode;

}

}

删除结点

/**

* 删除指定节点

* 首先循环移动指针查找到要删除的结点

* 再通过指针互换使要删除节点移出链表

* 返回值为头节点

* 删除头节点则返回新的头节点

*

*

* @param head

* @param delKey

* @return head

*/

static LinearList delete(LinearList head,int delKey){

LinearList node = null;

LinearList temp = null;

/**

* 如果要删除的是头节点

* 则返回删除后新的头节点

*

*/

if(head.i == delKey){

temp = head.nextNode;

head.nextNode = null;

return temp;

}

temp = head.nextNode;

while (temp != null){

if(temp.nextNode.i == delKey){

node = temp.nextNode.nextNode;

temp.nextNode = node;

return head;

}else{

temp = temp.nextNode;

}

}

return null;

}

插入结点

/**

* 在链表指定位置插入节点

* insertKey 插入节点的数据

* upperNodeKey 引用插入节点的元素的数据

*

* 通过find 方法返回链表中的插入位置的上一节点

* 改变插入节点的指针指向插入节点

* 插入节点的指针指向插入位置的下一节点

*

* @param head

* @param inserKey

* @param upperNodeKey

* @return

*/

static int insert(LinearList head,int inserKey,int upperNodeKey ){

//判断头节点有没有初始化

if(head == null){

return 0;

}

//保存查找节点的结果

LinearList temp = find(head,upperNodeKey);

//保存temp 对下一节点的引用

LinearList temp1 = null;

//即将插入的新节点

LinearList insertNode = new LinearList();

insertNode.i = inserKey;

if (temp == null){

return 0;

}else{

//指针互换

temp1 = temp.nextNode;

temp.nextNode = insertNode;

insertNode.nextNode = temp1;

return 1;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值