diff --git a/src/dataANDcalc/java/LinkedList/DoubleLinkedList.java b/src/dataANDcalc/java/LinkedList/DoubleLinkedList.java new file mode 100644 index 0000000..0e4de46 --- /dev/null +++ b/src/dataANDcalc/java/LinkedList/DoubleLinkedList.java @@ -0,0 +1,175 @@ +package LinkedList; + +import java.util.Scanner; + +public class DoubleLinkedList { + + private DoubleLinkedList.DoubleLinkedListNode head = new DoubleLinkedList.DoubleLinkedListNode(0, 0); + + public void add(DoubleLinkedListNode node){ + DoubleLinkedListNode temp = head; + while (true) { + if (temp.next == null){ + break; + } + temp = temp.next; + } + temp.next = node; + node.prev = temp; + } + + public void modify(DoubleLinkedListNode node){ + DoubleLinkedListNode 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){ + DoubleLinkedListNode temp = head.next; + if (temp == null){ + System.out.println("链表为空"); + return; + } + while (true) { + if (temp == null){ + System.out.println("未找到需要删除的节点"); + return; + } + if (temp.nodeId == nodeId){ + if (temp.next == null){ + temp.prev.next = null; + return; + } + temp.next.prev = temp.prev; + temp.prev.next = temp.next; + return; + } + temp = temp.next; + } + } + + private void show(){ + DoubleLinkedListNode temp = head; + if (head.next == null){ + System.out.println("当前双向链表为空"); + } + while(true){ + if (temp.next == null){ + break; + } + temp = temp.next; + System.out.println(temp.print()); + } + } + + public static void main(String[] args) { + DoubleLinkedList doubleLinkedList = new DoubleLinkedList(); + 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(); + DoubleLinkedList.DoubleLinkedListNode node = new DoubleLinkedList.DoubleLinkedListNode(no,data); + doubleLinkedList.add(node); + } + if ("r".equals(handle)){ + System.out.println("请输入节点编号:"); + int no = scan.nextInt(); + System.out.println("请输入节点数据:"); + int data = scan.nextInt(); + DoubleLinkedList.DoubleLinkedListNode node = new DoubleLinkedList.DoubleLinkedListNode(no,data); + } + if ("s".equals(handle)){ + doubleLinkedList.show(); + } + if ("u".equals(handle)){ + System.out.println("请输入更新节点编号:"); + int no = scan.nextInt(); + System.out.println("请输入更新节点数据:"); + int data = scan.nextInt(); + DoubleLinkedList.DoubleLinkedListNode node = new DoubleLinkedList.DoubleLinkedListNode(no,data); + doubleLinkedList.modify(node); + } + if ("d".equals(handle)){ + System.out.println("请输入删除节点编号:"); + int no = scan.nextInt(); + doubleLinkedList.delete(no); + } + } + scan.close(); + } + + public static class DoubleLinkedListNode{ + private int nodeId; + private int data; + private DoubleLinkedListNode next; + private DoubleLinkedListNode prev; + + public DoubleLinkedListNode(int nodeId, int data){ + this.nodeId = nodeId; + this.data = data; + } + + 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 DoubleLinkedListNode getNext() { + return next; + } + + public void setNext(DoubleLinkedListNode next) { + this.next = next; + } + + public DoubleLinkedListNode getPrev() { + return prev; + } + + public void setPrev(DoubleLinkedListNode prev) { + this.prev = prev; + } + + public String print() { + return "DoubleLinkedListNode{" + + "nodeId=" + nodeId + + ", data=" + data + + ", next=" + (next == null ? "null" : String.valueOf(next.nodeId)) + + ", prev=" + (prev == null ? "null" : String.valueOf(prev.nodeId)) + + '}'; + } + } +} diff --git a/src/dataANDcalc/java/LinkedList/SingleLinkedListExam.java b/src/dataANDcalc/java/LinkedList/SingleLinkedListExam.java new file mode 100644 index 0000000..64a854c --- /dev/null +++ b/src/dataANDcalc/java/LinkedList/SingleLinkedListExam.java @@ -0,0 +1,24 @@ +package LinkedList; + +public class SingleLinkedListExam { + + // 1.求单向列表中有效节点的个数 + + // 2.查找单向链表中倒数第k个节点 + /* + 1.统计链表的长度 + 2.根据长度减去k得到实际需要遍历的长度 + 3.根据实际需要遍历的长度获取节点 + */ + + // 3.单向链表的反转 + /* + 1.先定义一个新的头节点 + 2.从头到尾遍历原来的链表,每遍历一个节点,就将其放到新的链表的最前端 + 3.将原来的链表头指向新的链表 + */ + + // 4.从尾到头打印单向链表 + + // 5.合并两个有序的单向链表,合并之后链表仍然有顺序 +}