2025-01-12 单向链表
This commit is contained in:
parent
190af1636a
commit
0ade829dfa
191
src/dataANDcalc/java/LinkedList/SingleLinkedList.java
Normal file
191
src/dataANDcalc/java/LinkedList/SingleLinkedList.java
Normal 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 +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user