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