From c8fbe0b8f1c4671744d4e95aaccd9d673a0eaeac Mon Sep 17 00:00:00 2001 From: hmy <1366553174@qq.com> Date: Sun, 1 Nov 2020 22:12:47 +0800 Subject: [PATCH 1/2] init --- Main.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Main.java b/Main.java index 0574288..54158df 100644 --- a/Main.java +++ b/Main.java @@ -4,6 +4,8 @@ class Main { ll.addToFront(1); ll.addToFront(2); ll.addToRear(3); + + ll.print(); } -- Gitee From bb63adb72f447daa744a7f836d70fff7acf9eb9e Mon Sep 17 00:00:00 2001 From: hmy <1366553174@qq.com> Date: Tue, 3 Nov 2020 23:30:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8F=90=E4=BA=A41=E3=80=812=E3=80=813?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Main.java | 68 +++++++++++++++++--- TopicOne/Node.java | 10 +++ TopicOne/OneLinkedList.java | 102 ++++++++++++++++++++++++++++++ TopicThree/Node.java | 11 ++++ TopicThree/ThreeLinkedList.java | 86 +++++++++++++++++++++++++ TopicTwo/Node.java | 10 +++ TopicTwo/TowLinkedList.java | 107 ++++++++++++++++++++++++++++++++ 7 files changed, 386 insertions(+), 8 deletions(-) create mode 100644 TopicOne/Node.java create mode 100644 TopicOne/OneLinkedList.java create mode 100644 TopicThree/Node.java create mode 100644 TopicThree/ThreeLinkedList.java create mode 100644 TopicTwo/Node.java create mode 100644 TopicTwo/TowLinkedList.java diff --git a/Main.java b/Main.java index 54158df..01e54d2 100644 --- a/Main.java +++ b/Main.java @@ -1,12 +1,64 @@ +import TopicOne.OneLinkedList; +import TopicThree.ThreeLinkedList; +import TopicTwo.TowLinkedList; + class Main { - public static void main(String[] args) { - LinkedList ll = new LinkedList(); - ll.addToFront(1); - ll.addToFront(2); - ll.addToRear(3); + public static void main(String[] args) { + System.out.println("****************************************************"); + System.out.println("1.用你擅长的语言实现链表"); + OneLinkedList oneLinkedList = new OneLinkedList(); + oneLinkedList.printItems(); + oneLinkedList.addToFront("1"); + oneLinkedList.addToFront("2"); + oneLinkedList.printItems(); + oneLinkedList.addToRear("3"); + oneLinkedList.addToRear("4"); + oneLinkedList.printItems(); + boolean itemExist = oneLinkedList.findItem("3"); + System.out.println(itemExist ? "节点存在" : "节点不存在"); + System.out.println("链表长度为" + oneLinkedList.size()); + oneLinkedList.printItems(); + oneLinkedList.deleteItems("2"); + oneLinkedList.printItems(); + oneLinkedList.deleteItems("4"); + oneLinkedList.printItems(); + oneLinkedList.deleteItems("5"); + oneLinkedList.printItems(); + System.out.println("****************************************************"); + System.out.println("2.实现带尾指针的链表"); + TowLinkedList towLinkedList = new TowLinkedList<>(); + towLinkedList.addToFront("1"); + towLinkedList.addToFront("2"); + towLinkedList.addToRear("3"); + towLinkedList.addToRear("4"); + towLinkedList.printItems(); + boolean itemExist1 = towLinkedList.findItem("3"); + System.out.println(itemExist1 ? "节点存在" : "节点不存在"); + itemExist1 = towLinkedList.findItem("5"); + System.out.println(itemExist1 ? "节点存在" : "节点不存在"); + System.out.println("链表长度为" + towLinkedList.size()); + towLinkedList.printItems(); + towLinkedList.deleteItems("2"); + towLinkedList.printItems(); + towLinkedList.deleteItems("4");//测试删除尾结点 + towLinkedList.printItems(); + towLinkedList.addToRear("4"); + towLinkedList.printItems(); + towLinkedList.deleteItems("5"); + towLinkedList.printItems(); + System.out.println("****************************************************"); + System.out.println("3.实现双向链表"); + ThreeLinkedList threeLinkedList = new ThreeLinkedList<>(); + threeLinkedList.addToFront("1"); + threeLinkedList.addToFront("2"); + threeLinkedList.addToRear("3"); + threeLinkedList.addToRear("5"); + threeLinkedList.printItems(); + threeLinkedList.deleteItems("5"); + threeLinkedList.printItems(); + threeLinkedList.deleteItems("5"); + threeLinkedList.printItems(); - ll.print(); - - } + } } \ No newline at end of file diff --git a/TopicOne/Node.java b/TopicOne/Node.java new file mode 100644 index 0000000..4515e6b --- /dev/null +++ b/TopicOne/Node.java @@ -0,0 +1,10 @@ +package TopicOne; + +public class Node { + E item; + Node next = null; + + Node(E item) { + this.item = item; + } +} \ No newline at end of file diff --git a/TopicOne/OneLinkedList.java b/TopicOne/OneLinkedList.java new file mode 100644 index 0000000..64c3dc4 --- /dev/null +++ b/TopicOne/OneLinkedList.java @@ -0,0 +1,102 @@ +package TopicOne; + +public class OneLinkedList { + + private Node head; + + public OneLinkedList() { + this.head = null; + } + + //添加到头部 + public void addToFront(E value) { + Node node = new Node(value); + if (head != null) { + node.next = head; + } + head = node; + } + + //添加到最后 + public void addToRear(E value) { + Node node = new Node<>(value); + if (head == null) { + head = node; + } else { + Node temp = head; + while (temp.next != null) { + temp = temp.next; + } + temp.next = node; + } + } + + // 打印所有节点 + public void printItems() { + if (head != null) { + String nodeListStr = ""; + Node temp = head; + while (temp != null) { + nodeListStr += (temp.item + "->"); + temp = temp.next; + } + System.out.println(nodeListStr); + } else { + System.out.println("空链表"); + } + } + + //删除节点 前提元素不重复 + public void deleteItems(E value) { + if (head != null) { + String headStr = (String) head.item; + if (headStr.equals(value)){ + head= head.next; + return; + } + Node preNode = head; + Node curNode = head.next; + while (curNode != null) { + //这里全当字符串处理 + String itemStr = (String) curNode.item; + if (itemStr.equals(value)) { + //内容相同进行删除 结束循环 + preNode.next= curNode.next; + return; + } + preNode=preNode.next; + curNode=preNode.next; + } + System.out.println("无此节点,删除失败"); + } else { + System.out.println("链表为空,无法进行删除操作"); + } + } + + //判断节点是否存在 + public boolean findItem(E value) { + Node temp = head; + while (temp != null) { + //这里全当字符串处理 + String itemStr = (String) temp.item; + if (itemStr.equals(value)) { + //内容相同节点存在结束循环 + return true; + } + temp = temp.next; + } + return false; + } + + //计算链表长度数值 + public int size() { + int linkedListLength = 0; + Node temp = head; + while (temp != null) { + linkedListLength++; + temp = temp.next; + } + return linkedListLength; + } + +} diff --git a/TopicThree/Node.java b/TopicThree/Node.java new file mode 100644 index 0000000..7161e21 --- /dev/null +++ b/TopicThree/Node.java @@ -0,0 +1,11 @@ +package TopicThree; + +public class Node { + E item; + Node prev = null; + Node next = null; + + Node(E item) { + this.item = item; + } +} \ No newline at end of file diff --git a/TopicThree/ThreeLinkedList.java b/TopicThree/ThreeLinkedList.java new file mode 100644 index 0000000..90769e6 --- /dev/null +++ b/TopicThree/ThreeLinkedList.java @@ -0,0 +1,86 @@ +package TopicThree; + +public class ThreeLinkedList { + + private Node head, tail; + + public ThreeLinkedList() { + this.head = null; + this.tail = null; + } + + public void addToFront(E item) { + Node node = new Node<>(item); + if (head == null) { + tail = node; + } else { + head.prev = node; + node.next = head; + } + head = node; + } + + public void addToRear(E item) { + Node node = new Node<>(item); + if (head == null) { + head = node; + } else { + tail.next = node; + node.prev = tail; + } + tail = node; + } + + //删除节点 前提元素不重复 + public void deleteItems(E value) { + Node node = head; + String itemStr = (String) node.item; + while (!itemStr.equals(value)) { + if (node.next == null) { + System.out.println("找不到节点"); + return; + } + node = node.next; + itemStr = (String) node.item; + } + if (node == head) { + head = head.next; + } else { + node.prev.next = node.next; + } + } + + + //判断节点是否存在 + public boolean findItem(E value) { + Node temp = head; + while (temp != null) { + //这里全当字符串处理 + String itemStr = (String) temp.item; + if (itemStr.equals(value)) { + //内容相同节点存在结束循环 + return true; + } + temp = temp.next; + } + return false; + } + + + // 打印所有节点 + public void printItems() { + if (head != null) { + String nodeListStr = ""; + Node temp = head; + while (temp != null) { + nodeListStr += (temp.item + "->"); + temp = temp.next; + } + System.out.println(nodeListStr); + } else { + System.out.println("空链表"); + } + } + +} + diff --git a/TopicTwo/Node.java b/TopicTwo/Node.java new file mode 100644 index 0000000..fb6bdcc --- /dev/null +++ b/TopicTwo/Node.java @@ -0,0 +1,10 @@ +package TopicTwo; + +public class Node { + E item; + Node next = null; + + Node(E item) { + this.item = item; + } +} \ No newline at end of file diff --git a/TopicTwo/TowLinkedList.java b/TopicTwo/TowLinkedList.java new file mode 100644 index 0000000..6e20c87 --- /dev/null +++ b/TopicTwo/TowLinkedList.java @@ -0,0 +1,107 @@ +package TopicTwo; + + +public class TowLinkedList { + private Node head, tail; + + public TowLinkedList() { + this.head = null; + this.tail = null; + } + + //添加到头部 + public void addToFront(E value) { + Node node = new Node(value); + if (head == null) { + tail = node; + } else { + node.next = head; + } + head = node; + } + + //添加到最后 + public void addToRear(E value) { + Node node = new Node(value); + if (head == null) { + head = node; + } else { + tail.next = node; + } + tail = node; + } + + // 打印所有节点 + public void printItems() { + if (head != null) { + String nodeListStr = ""; + Node temp = head; + while (temp != null) { + nodeListStr += (temp.item + "->"); + temp = temp.next; + } + System.out.println(nodeListStr); + } else { + System.out.println("空链表"); + } + } + + //删除节点 前提元素不重复 + public void deleteItems(E value) { + if (head != null) { + String headStr = (String) head.item; + if (headStr.equals(value)) { + head = head.next; + return; + } + Node preNode = head; + Node curNode = head.next; + while (curNode != null) { + //这里全当字符串处理 + String itemStr = (String) curNode.item; + if (itemStr.equals(value)) { + if (curNode.next == null) { + //删除最后一项 + //移动尾指针 + tail = preNode; + } + //内容相同进行删除 结束循环 + preNode.next = curNode.next; + return; + } + preNode = preNode.next; + curNode = preNode.next; + } + System.out.println("无此节点,删除失败"); + } else { + System.out.println("链表为空,无法进行删除操作"); + } + } + + //判断节点是否存在 + public boolean findItem(E value) { + Node temp = head; + while (temp != null) { + //这里全当字符串处理 + String itemStr = (String) temp.item; + if (itemStr.equals(value)) { + //内容相同节点存在结束循环 + return true; + } + temp = temp.next; + } + return false; + } + + //计算链表长度数值 + public int size() { + int linkedListLength = 0; + Node temp = head; + while (temp != null) { + linkedListLength++; + temp = temp.next; + } + return linkedListLength; + } + +} -- Gitee