2025-01-12 单向链表

This commit is contained in:
liangjinglin 2025-01-12 13:36:22 +08:00
parent 190af1636a
commit 0ade829dfa

View File

@ -0,0 +1,191 @@
package LinkedList;
import queue.ArrayCircleQueue;
import java.util.Scanner;
public class SingleLinkedList {
private SingleLinkedListNode head = new SingleLinkedListNode(0, 0);
// 找到当前链表的最后节点然后将这个节点的next指向新的节点
public void add(SingleLinkedListNode node){
SingleLinkedListNode temp = head;
while (true) {
if (temp.next == null){
break;
}
temp = temp.next;
}
temp.next = node;
}
/**
* @param node
* 也可以通过设置标志位boolean来进行判断
*/
public void addByRange(SingleLinkedListNode node){
SingleLinkedListNode temp = head;
while (true) {
if (temp.next == null){
break;
}
if (temp.next.nodeId > node.nodeId){
break;
}
if (temp.next.nodeId == node.nodeId){
System.out.println("已存在相同ID");
return;
}
temp = temp.next;
}
node.next = temp.next;
temp.next = node;
}
public void modify(SingleLinkedListNode node){
SingleLinkedListNode temp = head;
if (head.next == null){
System.out.println("链表为空");
return;
}
while (true) {
temp = temp.next;
if (temp == null){
System.out.println("未找到更新的数据");
return;
}
if (temp.nodeId == node.nodeId){
temp.data = node.data;
System.out.println("数据更新成功");
return;
}
}
}
public void delete(int nodeId){
SingleLinkedListNode temp = head;
if (head.next == null){
System.out.println("链表为空");
return;
}
while (true) {
if (temp.next == null){
System.out.println("未找到需要删除的节点");
return;
}
if (temp.next.nodeId == nodeId){
temp.next = temp.next.next;
return;
}
temp = temp.next;
}
}
public void show(){
SingleLinkedListNode temp = head.next;
if (temp == null) {
System.out.println("链表为空");
}
while (true) {
System.out.println(temp.toString());
temp = temp.next;
if (temp == null) {
break;
}
}
}
public static void main(String[] args) {
SingleLinkedList singleLinkedList = new SingleLinkedList();
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println("a添加节点, s查看节点, r按顺序加入, u更新数据, d删除数据 exit退出:");
String handle = scan.next();
if ("exit".equals(handle)){
break;
}
if ("a".equals(handle)){
System.out.println("请输入节点编号:");
int no = scan.nextInt();
System.out.println("请输入节点数据:");
int data = scan.nextInt();
SingleLinkedList.SingleLinkedListNode node = new SingleLinkedList.SingleLinkedListNode(no,data);
singleLinkedList.add(node);
}
if ("r".equals(handle)){
System.out.println("请输入节点编号:");
int no = scan.nextInt();
System.out.println("请输入节点数据:");
int data = scan.nextInt();
SingleLinkedList.SingleLinkedListNode node = new SingleLinkedList.SingleLinkedListNode(no,data);
singleLinkedList.addByRange(node);
}
if ("s".equals(handle)){
singleLinkedList.show();
}
if ("u".equals(handle)){
System.out.println("请输入更新节点编号:");
int no = scan.nextInt();
System.out.println("请输入更新节点数据:");
int data = scan.nextInt();
SingleLinkedList.SingleLinkedListNode node = new SingleLinkedList.SingleLinkedListNode(no,data);
singleLinkedList.modify(node);
}
if ("d".equals(handle)){
System.out.println("请输入删除节点编号:");
int no = scan.nextInt();
singleLinkedList.delete(no);
}
}
scan.close();
}
public static class SingleLinkedListNode {
private int nodeId;
private int data;
private SingleLinkedListNode next;
public SingleLinkedListNode(int nodeId, int data){
this.nodeId = nodeId;
this.data = data;
}
public SingleLinkedListNode(){}
public int getNodeId() {
return nodeId;
}
public void setNodeId(int nodeId) {
this.nodeId = nodeId;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public SingleLinkedListNode getNext() {
return next;
}
public void setNext(SingleLinkedListNode next) {
this.next = next;
}
@Override
public String toString() {
return "SingleLinkedListNode{" +
"nodeId=" + nodeId +
", data=" + data +
", next=" + next +
'}';
}
}
}