java 单向链表基本操作
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; Node 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
菜鸟阶段,错误难免,还请多多指教!