/*写一个完整的程序,实现随机生成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--;
}
}
}
}
(学习java)写一个完整的程序,实现随机生成20个元素的链表,快速查找中间结点的值并显示
最新推荐文章于 2024-08-28 20:02:47 发布