(学习java)写一个完整的程序,实现随机生成20个元素的链表,快速查找中间结点的值并显示

来源:互联网 发布:yellow submarine 知乎 编辑:程序博客网 时间:2024/06/05 21:08
/*写一个完整的程序,实现随机生成20个元素的链表,快速查找中间结点的值并显示*/public class LineListNodeHead {public static void main(String[] args) {System.out.println("1.查看链表");System.out.println("2.创建链表(尾插法)");System.out.println("3.链表长度");System.out.println("4.中间结点值");System.out.println("5.请空链表");System.out.println("0.退出");System.out.println("------------------");LineList L = new LineList();while(true){System.out.println("请选择你的操作:");Scanner ss = new Scanner(System.in);int n = ss.nextInt();if(n == 0){break;}else if(n == 1){//遍历链表L.ListNode();}else if(n == 2){//创建链表System.out.println("请输入要创建的链表长度");int i = ss.nextInt();L.addNodeR(i);L.ListNode();}else if(n == 3){//显示链表长度System.out.println("链表的长度" + L.size);}else if(n == 4){//取中间结点值int j = L.SearchMid();System.out.println("中间结点值" + j);}else if(n == 5){//清空链表L.ListClear();L.ListNode();}else{System.out.println("输入有误!");}}}public interface IList{public void addNodeH(int data);public void addNodeF(int data);public void ListNode();public int ListInsert(int i, int data);public int ListDelete(int i);public void ListClear();//实现随机存储元素public void addNodeR(int n);//查找中间结点public int SearchMid();}//结点public static class Node{public int data;public Node next;public Node(){}public Node(int data){this.data = data;this.next = null;}}public static class LineList implements IList{//头结点private Node head;//链表长度private int size;public LineList(){head = new Node();}//实现随机存储元素public void addNodeR(int n){for (int i=0;i<n;i++){int j = (int) (Math.random()*100);addNodeF(j);}}@Override//查找中间结点public int SearchMid() {Node search = head;Node mid = head;while(search.next != null){if(search.next.next != null){search = search.next.next;mid = mid.next;}else{search = search.next;}}return mid.data;}@Override//带头结点的单链表头插法public void addNodeH(int data) {Node node = new Node(data);if(head.next == null){head.next = node;size++;}else{node.next = head.next;head.next = node;size++;}}@Override//带头结点的单链表尾插法public void addNodeF(int data) {Node node = new Node(data);if(head.next == null){head.next = node;size++;}else{Node p = head.next;while(p.next != null){p = p.next;}node.next = p.next;p.next = node;size++;}}@Override//带头结点的单链表遍历public void ListNode() {Node p = head.next;if(p == null){System.out.println("空链表");System.out.println("单链表的长度" + size);}else{while(p.next != null){System.out.print(p.data  + "->");p = p.next;}System.out.println(p.data);System.out.println("单链表的长度" + size);}}@Override//带头结点的单链表任意插入public int ListInsert(int i, int data) {Node temp = head;int j = 1;if(i<0){System.out.println("i值输入有误");return 0;}while(temp.next != null && j<i){temp = temp.next;j++;}Node node = new Node(data);node.next = temp.next;temp.next = node;size++;return 1;}@Override//单链表的删除public int ListDelete(int i) {Node temp = head;int j = 1;if(i<0){System.out.println("i值输入有误");return 0;}while(temp.next!=null && j<i){temp = temp.next;j++;}int n = temp.next.data;temp.next = temp.next.next;size--;return n;}@Override//列表的清空public void ListClear() {Node temp = head.next;while(head.next!=null){head.next = temp.next;temp = null;temp = head.next;size--;}}}}

阅读全文
0 0