以下包含链表当中最基本的增删改查功能,便于学习数据结构打基础
import java.util.Scanner;
public class Linked_list_collection {
static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
int option,target,insert,modify,locate;
ListNode head = null;
while(true){
Menu();
System.out.print("请选择功能选项:");
option = sc.nextInt();
switch(option){
case 1 -> {
if(head != null){
System.out.println("已经存在链表,不能重复创建,如需添加请选择添加选项!");
break;
}
head = Create(null);
}
case 2 -> {
if(head == null){
System.out.println("暂无链表,请先创建链表!");
break;
}
Print(head);
}
case 3 -> {
if(head == null){
System.out.println("暂无链表,请先创建链表!");
break;
}
System.out.print("请输入想要插入到哪一个数据之前(按回车确认):");
target = sc.nextInt();
System.out.print("请输入想要插入的数据(按回车确认):");
insert = sc.nextInt();
head = Head_Insert(head , target , insert);
}
case 4 -> {
if(head == null){
System.out.println("暂无链表,请先创建链表!");
break;
}
System.out.print("请输入想要插入到哪一个数据之后(按回车确认):");
target = sc.nextInt();
System.out.print("请输入想要插入的数据(按回车确认):");
insert = sc.nextInt();
head = Tail_Insert(head , target , insert);
}
case 5 -> {
if(head == null){
System.out.println("暂无链表,请先创建链表!");
break;
}
System.out.print("请输入要删除入的数据:");
target = sc.nextInt();
head = Delete(head , target);
}
case 6 -> {
if(head == null){
System.out.println("暂无链表,请先创建链表!");
break;
}
System.out.print("请输入需要修改的数据:");
target = sc.nextInt();
System.out.print("请输入修改后的数据:");
modify = sc.nextInt();
head = Modify(head , target , modify);
}
case 7 -> {
if(head == null){
System.out.println("暂无链表,请先创建链表!");
break;
}
System.out.print("请输入查找的位置:");
locate = sc.nextInt();
Search(head , locate);
}
case 8 -> {
System.out.println("退出成功!");
sc.close();
System.exit(0);
}
default -> System.out.println("请输入正确的选项!");
}
}
}
public static ListNode Create(ListNode head){
int count,n;
ListNode q = null;
count = 0;
System.out.print("请输入数据(输入-1停止):");
while(true){
n = sc.nextInt();
if(n == -1) break;
ListNode p = new ListNode(n);
if(count == 0){
head = p;
count++;
}
else{
q.next = p;
}
q = p;
}
if(q != null) q.next = null;
return head;
}
public static void Print(ListNode head){
System.out.print("当前链表数据为:");
while(head != null){
System.out.print(head.val + " ");
head = head.next;
}
System.out.println();
}
public static ListNode Head_Insert(ListNode head , int target , int insert){
ListNode pre,cur;
cur = head; pre = null;
while(cur != null && cur.val != target){
pre = cur;
cur = cur.next;
}
if(cur == null){
System.out.println("查无此数!");
return head;
}
ListNode new_list = new ListNode(insert);
pre.next = new_list;
new_list.next = cur;
System.out.println("添加成功!");
return head;
}
public static ListNode Tail_Insert(ListNode head , int target , int insert){
ListNode h = head;
while(h != null && h.val != target) h = h.next;
if(h == null){
System.out.println("查无此数!");
return head;
}
ListNode new_list = new ListNode(insert);
ListNode temp;
temp = h.next;
h.next = new_list;
new_list.next = temp;
System.out.println("添加成功!");
return head;
}
public static ListNode Delete(ListNode head , int target){
while(head != null && head.val == target) head = head.next;
if(head == null){
System.out.println("查无此数!");
System.exit(0);
}
else{
ListNode pre,cur;
pre = head; cur = head.next;
while(cur != null){
if(cur.val == target) pre.next = cur.next;
else pre = cur;
cur = cur.next;
}
}
System.out.println("删除成功!");
return head;
}
public static ListNode Modify(ListNode head , int target , int modify){
ListNode h = head;
while(h != null){
if(h.val == target) h.val = modify;
h = h.next;
}
return head;
}
public static void Search(ListNode head , int locate){
int count = 0;
while(head != null){
count++;
if(count == locate){
System.out.print(locate + "位的数据为:" + head.val);
break;
}
head = head.next;
}
if(head == null) System.out.print("查无此数!");
System.out.println();
}
public static void Menu(){
System.out.println("-------------------链表功能-------------------");
System.out.println(" 1.创建链表");
System.out.println(" 2.链表打印");
System.out.println(" 3.添加数据(头插)");
System.out.println(" 4.添加数据(尾插)");
System.out.println(" 5.删除数据");
System.out.println(" 6.修改数据");
System.out.println(" 7.查找数据");
System.out.println(" 8.退出");
System.out.println("------------------------------------------");
}
}
class ListNode{
public int val;
public ListNode next;
public ListNode() {
}
public ListNode(int val) {
this.val = val;
}
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
}