提示:仅做参考!!! 仅做参考!!! 仅做参考!!!
目的:
- 用头插法或尾插法建立带头结点的单链表
- 实现单链表上的插入、删除、查找、修改、计数、输出等基本操作
提供的方法:
- 向单链表中顺序添加node节点的最后 : public void add(ListNode node)
- 顺序(从小到大)添加: public void OderAdd(ListNode node)
- 删除一个节点: public void delete(int n)
- 更新: public void update(int m,int n)
- 查找: public void search(int n)
- 打印单链表: public void show()
测试结果:
源码:
import java.awt.List;
import java.util.Scanner;
import javax.swing.plaf.synth.SynthScrollBarUI;
import org.omg.CosNaming.IstringHelper;
//创建一个节点类
class ListNode {
int data;
public ListNode next;// next 指向下一个节点(每一个对象就是一个节点 )
// 构造函数(构造器)
public ListNode(int data) {
this.data=data;
}
// 重写tostring()
@Override
public String toString() {
return "ListNode [data=" + data + "]";
}
}
class SingleList{//创建单链表类
private ListNode top=new ListNode(0);//创建一个头结点(对象),不存放数据,值为空
// 向单链表中顺序添加node节点的最后
public void add(ListNode node) {
ListNode foot=top;//辅助节点foot,并指向头节点
while(true) {
if(foot.next==null)//链表为空时
break;
else
foot=foot.next;//不为空时,foot进行遍历直到找到链表的最后
}
foot.next=node;//将node节点添加到链表最后
}
// 顺序(从小到大)添加
public void OderAdd(ListNode node) {
ListNode foot=top;
boolean flag=false;
while(true) {
// 链表为空或找到位置
if(foot.next==null || foot.next.data>node.data)
break;
if(foot.next.data==node.data) {
flag=true;
break;
}
// 临时辅助指针后移
foot=foot.next;
}
if(flag) {
System.out.println("插入值已存在,插入失败!");
}
else {
node.next=foot.next;
foot.next=node;
}
}
// 删除一个节点
public void delete(int n) {
ListNode foot=top;//辅助节点foot,并指向头节点
while(true) {
if(foot.next==null) { //链表为空时
break;
}
if(foot.next.data==n) {
ListNode p;
p=foot.next; //删除操作
foot.next=p.next;
break;
}
else foot=foot.next; //foot后移
}
}
// 更新
public void update(int m,int n) {
ListNode foot=top.next;//辅助节点foot,并指向头节点
while(true) {
if(foot==null) {
break;
}
if(foot.data==m) { //匹配成功
foot.data=n;
break;
}
else foot=foot.next; //foot后移
}
}
// 查找
public void search(int n) {
ListNode foot=top;//辅助节点foot,并指向头节点
int number=1;
while(true) {
if(foot.next==null) {
System.out.println("链表为空");
break;
}
if(foot.next.data==n) {
System.out.println(n+" 位于第 "+number+" 个节点上");
break;
}
else {
foot=foot.next; //后移,实现遍历
number++;
}
}
}
// 打印单链表
public void show() {
if(top.next==null) {//单链表为空时
System.out.println("此链表为空链表");
return;
}
else {
ListNode foot=top.next;//创建辅助节点foot
while(true) {
if(foot!=null) {
System.out.println(foot);
foot=foot.next; //遍历实现打印
}
else
break;//foot为空时,结束
}
}
}
}
public class SingleLinkedList_增删改查 {
public static void main(String[] args) {
System.out.println("huxuehao(制)\n单链表的 增删改查");
Scanner s = new Scanner(System.in);
SingleList singlelist = new SingleList();
boolean tf=true;
while(tf) {
System.out.println("--------------------------------------------------");
System.out.println("A_add B_delete C_update D_search E_show F_quit");
System.out.print("请选择:");
String select=s.next();System.out.println();
switch(select) { //选择判断语句
case"A":{
System.out.print("请输入被添加数:");
int value=s.nextInt();
ListNode listnode1 = new ListNode(value);
singlelist.add(listnode1);
System.out.println();break;
}
case"B":{
System.out.print("请输入被删除数:");
int value=s.nextInt();
singlelist.delete(value);
System.out.println();break;
}
case"C":{
System.out.print("请输入被替换数:");
int date1=s.nextInt();
System.out.print("请输入替换数:");
int value=s.nextInt();
singlelist.update(date1,value);
System.out.println();break;
}
case"D":{
System.out.print("请输入被查找数:");
int value=s.nextInt();
singlelist.search(value);
System.out.println();break;
}
case"E":{
singlelist.show();
System.out.println();break;
}
case"F":{
tf=false;System.out.println();break;
}
default:System.out.println("无此选项!!");System.out.println();break;
}
}
System.out.println("谢谢使用!");
s.close();
}
}