From 0ade829dfa93a221cfb1c354c377b7e478f2c3f9 Mon Sep 17 00:00:00 2001 From: liangjinglin Date: Sun, 12 Jan 2025 13:36:22 +0800 Subject: [PATCH] =?UTF-8?q?2025-01-12=20=E5=8D=95=E5=90=91=E9=93=BE?= =?UTF-8?q?=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/LinkedList/SingleLinkedList.java | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 src/dataANDcalc/java/LinkedList/SingleLinkedList.java diff --git a/src/dataANDcalc/java/LinkedList/SingleLinkedList.java b/src/dataANDcalc/java/LinkedList/SingleLinkedList.java new file mode 100644 index 0000000..d8fa06a --- /dev/null +++ b/src/dataANDcalc/java/LinkedList/SingleLinkedList.java @@ -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 + + '}'; + } + } +}