Java 链表(LinkNode)的简单操作:初始化,遍历,插入,删除等

由于java中没有结构体,所以用一个类来定义链表,代码如下

主要包括一个data,还有一个指向后面一个节点的next

重写了toString函数,返回你想要的数据

定义链表的类:

package LinkNode;

public class LinkNode {
public String data;
public LinkNode next;

public String getData(){
return data;
}
public void setData(String data){
this.data=data;
}

public LinkNode getNext(){
return next;
}
public void setNext(LinkNode next){
this.next=next;
}

public LinkNode(String data,LinkNode next){
super();
this.data=data;
this.next=next;
}
public LinkNode(){
super();
}

@Override
public String toString(){
return "data:"+data+" next->"+next;
}
}

1.初始化链表:

public static void initLinkNode(LinkNode L){
L.setData("#");
L.setNext(null);
}

2.遍历链表,返回链表的长度

public static int traverse(LinkNode L){
LinkNode p = L;
int count = 1;
while(p.next!=null){
p = p.next;
count++;
}
return count;
}

3.把链表L的data转化为StringBuffer输出,输出结果为字符串

public static StringBuffer outputLinkNode(LinkNode L){
StringBuffer str = new StringBuffer("");
LinkNode p = L;
for(@SuppressWarnings("unused")
int i=0;;){
str.append(p.data);
if(p.next!=null){
p = p.next;
}
else{
break;
}
}
return str;
}

4.在链表L的尾部插入一个节点,值为data

public static void insertLinkNode(LinkNode L,String data){
LinkNode p = L;
LinkNode q = new LinkNode();
for(@SuppressWarnings("unused")
int i=0;;){
if(p.next==null){
q.setData(data);
q.setNext(null);
p.setNext(q);
System.out.println("Insert "+data+" success.");
break;
}
else{
p = p.next;
}
}
}

5.删除第n个节点(从0开始)

public static void deleteLinkNode(LinkNode L,int n){
int count = 1;
LinkNode p = L;
for(@SuppressWarnings("unused")
int i;;){
if(count == n){
p.setNext(p.next.next);
break;
}
else{
count++;
p = p.next;
}
}
}

6.从index=n开始遍历,如果后面出现str,则返回true否则返回false

public static int lastIndex(LinkNode L,String str){
LinkNode p = L;
int flag = 0;
for(int i=0;i<traverse(L);i++){
if(p.data==str){
//System.out.println(i);
flag = i;
}
p = p.next;
}
return flag;
}

测试程序:

package LinkNode;

public class Quarrel extends Method{
public static void main(String[] args){
LinkNode L = new LinkNode();
System.out.println("初始化:");
initLinkNode(L);
System.out.println(L.toString());

System.out.println("插入节点:");
insertLinkNode(L,"R");
insertLinkNode(L,"R");
insertLinkNode(L,"L");
insertLinkNode(L,"L");
insertLinkNode(L,"R");
insertLinkNode(L,"L");
System.out.println(L.toString());

int count = traverse(L);
System.out.println("节点个数:"+count);

StringBuffer str = outputLinkNode(L);
System.out.println(str);
//最后一个L的位置
int lastindex = lastIndex(L,"L");
System.out.println("最后一个L的位置:"+lastindex);

System.out.println("删除一个节点");
deleteLinkNode(L,2);

count = traverse(L);
System.out.println("节点个数:"+count);
str = outputLinkNode(L);
System.out.println(str);
System.out.println(L.toString());
}
}

结果如下:

原文地址:https://www.cnblogs.com/fanghuiplus/p/9446376.html

时间: 2025-01-18 02:12:12

Java 链表(LinkNode)的简单操作:初始化,遍历,插入,删除等的相关文章

关于链表的一些简单操作

终于上黄金了.. 然后就是一波2连败... 最近 完全不想做题啊  一做题 就想碎觉啊 郁闷死了 根据书本 写了点关于单向链表的简单操作 可能还存在点小bug---先放它一马吧 以后可能再进行补充关于它的操作 毕竟还有好多 先慢慢找回敲键盘打代码的感觉 厌 1 /* 2 线性表之单向链表的一些常见操作 3 */ 4 #include <iostream> 5 using namespace std; 6 7 typedef int ElemType; 8 typedef struct LNod

「C语言」单链表/双向链表的建立/遍历/插入/删除

最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合,一种面向过程的MVC的感觉. 而这一切的基础就在于对链表的创建.删除.输出.写入文件.从文件读出...... 本篇文章在于巩固链表的基础知识(整理自<C语言程序设计教程--人民邮电出版社>第十章),只对链表的概念及增删改查作出探讨,欢迎指教. 一.链表结构和静态/动态链表 二.单链表的建立与遍历

c语言 双向链表的简单操作-创建、插入、删除

数据结构-双向链表的创建.插入和删除 双向链表是数据结构中重要的结构,也是线性结构中常用的数据结构,双向指针,方便用户从首结点开始沿指针链向后依次遍历每一个结点,结点的前驱和后继查找方便. #include <stdio.h> #include <stdlib.h> //双向链表结点的定义 typedef struct dbnode { int data; struct dbnode *prio, *next; }DbNode, linkdblist; //创建双向链表 DbNod

双向链表的初始化销毁插入删除

初始化 : 头结点 尾结点 都赋值为空删除 : 判定条件链表长度做判断条件  删除  释放 插入: 1,给一个结点后面插入 2,在一个结点前面插入 1)a,分配结点失败 返回 -1 b, 链表长度为0. 头部尾部都链接新结点,最后将新结点的头部尾部置为空 正常的插入四步    也得判断一下被插入结点 下一个结点是否为空 2)a,检查结点空间是否分配成功 b 链表长度为0  正常思考就行 判断插入位置前面的那个结点是否为空  正常思考

剑指offer (5) 链表插入删除

我们在操作链表的时候,必须注意以下事项: 1. 链表指针为NULL的情况 2. 插入删除涉及到 链表第一个节点时,需要修改 链表的第一个节点: a. 因为 c语言都是传值的,如果需要修改一个变量,就必须通过 指向该变量的指针(即该变量的地址) 例如:例如 修改 int a,则输入参数必须是 int* a, 修改a 则是: *a = b; (b为int) 我们需要修改一个指针时,就必须通过 该指针的地址,也就是 指向该指针的指针,即二级指针 例如  修改 int* a, 则输入参数必须是 int*

Java链表的删除操作

刚开始接触java时很长一段时间, 总觉得java链表的删除操作自己写的有bug. 第一个bug版本: 仅接removeByForlist.remove(j)之后应该显示调用i-- public static void testRemoveByFor() { List<Integer> removeByForlist = Lists.newArrayList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1); System.out.println(ToStringBuilder.re

【数据结构与算法】java链表操作

链表操作代码量少但是比较容易出错,是比较适合面试的地方. 代码实现 /** * 源码名称:MyLinkList.java * 日期:2014-09-05 * 程序功能:java链表操作 * 版权:[email protected] * 作者:A2BGeek */ import java.util.Stack; public class MyLinkList { class LinkNode<T> { private T mValue; private LinkNode<T> mNe

JAVA 链表操作:循环链表

主要分析示例: 一.单链表循环链表 二.双链表循环链表 其中单链表节点和双链表节点类和接口ICommOperate<T>与上篇一致,这里不在赘述.参考:JAVA链表操作:单链表和双链表http://www.cnblogs.com/xiaoxing/p/5969133.html 一.单链表循环链表 package LinkListTest; import java.util.HashMap; import java.util.Map; public class SingleCycleLinkLi

Java连接MySQL数据库及简单操作代码

1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘,然后将其目录下的MySQL-connector-java-5.0.5-bin.jar加到classpath里,具体如下: "我的电脑"-> "属性" -> "高级" -> "环境变量",在系统变量那里编辑clas