public class Point {
private int x;
private int y;
public Point() {
super();
// TODO Auto-generated constructor stub
}
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
@Override
public String toString() {
return "Point [x=" + x + ", y=" + y + "]";
}
}
package com.irisian;
import java.util.Scanner;
public class MyLink {
private MyLink link; // 指向自己的引用
private Point point;
public MyLink getLink() {
return link;
}
public void setLink(MyLink link) {
this.link = link;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public MyLink() {
super();
}
public MyLink(MyLink link, Point point) {
super();
this.link = link;
this.point = point;
}
/**
* 创建链表
*
* @return
*/
MyLink createLink() {
Scanner scanner = new Scanner(System.in);
Point point2 = new Point(1, 2);
MyLink myLink2 = null;
myLink2 = new MyLink(myLink2, point2);
// do{
// System.out.println("请输入两个数字:");
// int x=scanner.nextInt();
// int y=scanner.nextInt();
// Point point3 = new Point(x, y);
// myLink2 = new MyLink(myLink2, point3);
// }while(myLink2.getPoint().getX()!=0);
while (myLink2.getPoint().getX() != 0) { // 不为0则进行循环
System.out.println("请输入两个数字:");
int x = scanner.nextInt();
int y = scanner.nextInt();
Point point3 = new Point(x, y);
myLink2 = new MyLink(myLink2, point3);
}
myLink2 = myLink2.getLink();
return myLink2;
}
/**
* 打印链表
*/
void printLink(MyLink link) {
while (link.getLink() != null) {
System.out.println(link.getPoint());
link = link.getLink();
}
}
/**
* 插入一个节点到链表中
*
* @param link
* 插入的链表的引用
*/
MyLink insertLink(MyLink link) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入两个整数:");
int x = scanner.nextInt();
int y = scanner.nextInt();
Point point2 = new Point(x, y);
link = new MyLink(link, point2);
return link;
}
/**
* 删除链表
*
* @param link
* 链表的头引用
* @return 删除之后链表的头节点的引用
*/
MyLink deleteLink(MyLink link) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入需要删除的节点号");
int i = scanner.nextInt();
// 将头节点给保存起来
MyLink linkHead = link;
// 删除第一个元素和其他的元素的方法不太一致
if (i == 1) {
link = link.getLink();
return link;
} else {
// 现在要找到第i-1个元素
for (int j = 0; j < i - 2; j++) {
// link为第i-1个元素的引用
link = link.getLink();
}
// 为第i个元素的引用
MyLink link2 = link.getLink();
// 为第i+1个元素的引用
MyLink link3 = link2.getLink();
link.setLink(link3);
}
return linkHead;
}
public static void main(String[] args) {
MyLink myLink = new MyLink();
myLink.menu(myLink);
}
void menu(MyLink myLink) {
Scanner scanner = new Scanner(System.in);
System.out.println("1.创建链表 2.为链表增加节点 3.删除链表的节点 4.打印链表");
System.out.println("请输入操作指令:");
int i = scanner.nextInt();
switch (i) {
case 1:
myLink = createLink();
System.out.println("操作成功\n");
menu(myLink);
break;
case 2:
myLink = insertLink(myLink);
System.out.println("操作成功\n");
menu(myLink);
break;
case 3:
myLink = deleteLink(myLink);
System.out.println("操作成功\n");
menu(myLink);
break;
case 4:
printLink(myLink);
System.out.println("操作成功\n");
menu(myLink);
break;
default:
System.out.println("输入的参数不合法!\n");
menu(myLink);
break;
}
}
}