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
相关文章推荐
- java单向链表基本操作简单实现
- java版的单向链表的基本操作
- 基本单向链表的操作
- 链表(二)——单向链表的基本操作(创建、删除、打印、结点个数统计)
- java 链表基本操作
- 数据结构_线性表_链式存储_单向循环链表的基本操作
- 链表及其基本操作的JAVA实现。
- 单向链表,单向循环链表的基本操作
- 名单(两)——基本操作单向链表(创、删、印、节点统计数)
- JAVA中关于链表的操作和基本算法
- 单向链表的基本操作及逆序实现
- java描述链表基本操作
- 单向链表的基本操作
- JAVA中关于链表的操作和基本算法
- Java单向链表操作详解
- JAVA中关于链表的操作和基本算法
- java 单向链表的操作
- 单向链表的基本操作-创建、插入、删除
- Java单链表基本操作(四)--单链表反转
- JAVA中关于链表的操作和基本算法