您的位置:首页 > 编程语言 > Java开发

java 单向链表的基本操作

2017-02-28 18:36 579 查看

    今天学习了java中链表的知识,自己也动手实现了单向链表的相关操作,包括初始化、求表长、读链表节点、定位、插入、删除等等。

有错误欢迎大家指出并多多交流!

在 数据结构之链表增删查  这个包中定义一个Node类和一个Link类

package 数据结构之链表增删查;

public class Node {
String name;// 数据域
Node next;// 链域

public Node() {
this.name = "";
next = null;

}

public Node(String name) {
this.name = name;
next = null;
}

}

package 数据结构之链表增删查;

public class Link {
Node head;// 头结点

public Link() {
head = new Node();// 初始化头结点
}

/*
* 添加节点,在链表的最后添加
*/
public void add(Node data) {
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
temp.next = data;
}

/*
* 插入节点 在某个节点之后插入一个新的节点
*/
public void insert(Node data, String newname) {
Node temp = head;
while (temp.next != null) {
if (temp.next.name.equals(data.name)) {
Node newNode = new Node(newname);
newNode.next = temp.next.next;
temp.next.next = newNode;
break;
} else {
temp = temp.next;
}
}
} /*
* 删除节点
*/

public void delete(Node data) {
Node temp = head;
while (temp.next != null) {
if (temp.next.name.equals(data.name)) {
temp.next = temp.next.next;
break;
} else {
temp = temp.next;
}
}
}

/*
* 计算链表长度
*/
public int size() {
int len = 0;
No
4000
de temp = head;
while (temp.next != null) {
len++;
temp = temp.next;
}
return len;
}

/*
* 查找数据 返回该数据的位置,返回3说明此数据在链表的第3个节点处,-1为链表中无此数据
*/
public int serach(String name) {
Node temp = head.next;
int index = 0;
while (temp != null) {
if (temp.name.equals(name)) {
index++;
return index;
}
index++;
temp = temp.next;
}
return -1;
}

/*
* 遍历链表
*/
public void display() {
Node temp = head;
while (temp.next != null) {
System.out.print(temp.next.name + "->");
temp = temp.next;
}
System.out.println();
}

public static void main(String[] args) {
// 创建链表
Link link = new Link();
// 创建节点
Node node1 = new Node("宋江");
Node node2 = new Node("卢俊义");
Node node3 = new Node("吴用");
Node node4 = new Node("林冲");
Node node5 = new Node("李逵");
Node node6 = new Node("燕青");
// 链表中添加数据节点
link.add(node1);
link.add(node2);
link.add(node3);
link.add(node4);
link.add(node5);
link.add(node6);
link.display();// 遍历
System.out.println(link.size());// 6,输出链表长度
System.out.println(link.serach("李逵"));// 5
System.out.println(link.serach("燕"));// 不存在,返回-1
link.insert(node4, "花荣");// 在node4"林冲"之后添加"花荣"
link.display();// 插入数据后遍历
link.delete(node3);// 删除节点node3"吴用"
link.display();// 删除之后再遍历链表
System.out.println(link.size());
}
}


运行结果:

宋江->卢俊义->吴用->林冲->李逵->燕青->

6

5

-1

宋江->卢俊义->吴用->林冲->花荣->李逵->燕青->

宋江->卢俊义->林冲->花荣->李逵->燕青->

6
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: