java数据结构:链表
概念:链表可以使一种有序或无序的列表,内容通常存储在内存中分散的位置上,有节点组成,每一个节点的结构都相同,节点分为数据域和链域,数据域存放内容,链域存放的是下一个节点指针。
基本方法实现:
新增节点:
删除节点:
打印节点:
数组实现单链表:
创建节点类:Node.java
package LinkPackage; /** * @author zh * 节点模型 */ public class Node { String text; Node next; //头结点构造器 public Node(){ this.text = ""; this.next = null; } //节点构造器 public Node(String text){ this.text = text; this.next = next; } @Override public String toString() { return "Node{" + "text='" + text + '\'' + ", next=" + next + '}'; } }
创建链表类:Link.java
package LinkPackage; public class Link { //头结点 private Node head; //构造链表 public Link(){ head = new Node(); } //添加节点 public void addNode(String text){ //创建需要添加的节点 Node node = new Node(text); //创建临时节点 Node temp = head; while(temp.next != null){ //将循环条件更改 temp = temp.next; } temp.next = node; } //计算长度 public int size(){ int len = 0; Node temp = head; while(temp.next != null){ len++; temp = temp.next; } return len; } /** * 打印链表节点 */ public void displayLink(){ //设置临时节点 Node temp = head; //开始遍历 while(temp.next != null){ //输出节点 System.out.print(temp.next.text+"===>"); //开始下一个节点 temp = temp.next; } } /** * show 删除节点 */ public void delNode(String data){ //临时节点 Node temp = head; //开始循环遍历链表 while(temp.next != null){ //找到删除节点 if(temp.next.text.equals(data)){ //将链表的指针域指向下下个节点 temp.next = temp.next.next; //退出循环 break; } //不满足条件时,找到下个节点 temp = temp.next; } } /** * show 查找节点 */ public Node findNode(String nodeName){ //设置临时节点 Node temp = head; //创建空节点 Node data = null; //遍历链表 while(temp.next != null){ //查找条件符合 if(temp.next.text.equals(nodeName)){ //赋值 data = temp.next; //退出循环 break; } //条件不符合进行下一个节点操作,也就是改变了循环条件 temp = temp.next; } //返回查询结果 return data; } /** * show 反转单链表 */ public Node reverse(Node node){ if(node == null || node.next == null){ return node; } Node reNode = reverse(node.next); node.next.next = node; node.next = null; return reNode; } public static void main(String args[]){ Link link = new Link(); link.addNode("测试链表节点新增一"); link.addNode("测试链表节点新增二"); link.addNode("测试链表节点新增三"); link.addNode("测试链表节点新增四"); link.addNode("测试链表节点新增五"); System.out.println(link.head); System.out.println("链表长度:"+link.size()); link.displayLink(); System.out.println(); link.delNode("测试链表节点新增三"); System.out.println("链表长度:"+link.size()); link.displayLink(); System.out.println(); Node data = link.findNode("测试链表节点新增四"); System.out.print(data); Node node = link.reverse(link.head); while(node.next != null){ System.out.print(node.text+"===>"); node = node.next; } } }