From 6fcd573e1c1dbe0f365519ed42eeecc6e18ee0af Mon Sep 17 00:00:00 2001 From: chenhongchao Date: Tue, 3 Nov 2020 21:43:24 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BD=9C=E4=B8=9A2020034?= =?UTF-8?q?0903=E9=99=88=E9=B8=BF=E8=B6=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LinkedList.java | 3 + Main.java | 1 + Node.java | 1 + .../SinglyLinkedList.java" | 165 +++++++++++++++++ .../SinglyLinkedList.java" | 165 +++++++++++++++++ .../DoublyLinkedList.java" | 169 ++++++++++++++++++ 6 files changed, 504 insertions(+) create mode 100644 "\344\275\234\344\270\232\345\237\272\347\241\2001/SinglyLinkedList.java" create mode 100644 "\344\275\234\344\270\232\345\237\272\347\241\2002/SinglyLinkedList.java" create mode 100644 "\344\275\234\344\270\232\345\237\272\347\241\2003/DoublyLinkedList.java" diff --git a/LinkedList.java b/LinkedList.java index 7836598..96a669f 100644 --- a/LinkedList.java +++ b/LinkedList.java @@ -1,8 +1,11 @@ public class LinkedList { private Node head; + + public LinkedList() { head = null; + } public void addToFront(E item) { diff --git a/Main.java b/Main.java index 0574288..e6e0453 100644 --- a/Main.java +++ b/Main.java @@ -5,6 +5,7 @@ class Main { ll.addToFront(2); ll.addToRear(3); ll.print(); + } } \ No newline at end of file diff --git a/Node.java b/Node.java index ed7a352..aa460f8 100644 --- a/Node.java +++ b/Node.java @@ -2,6 +2,7 @@ public class Node { E item; Node next = null; + Node(E item) { this.item = item; } diff --git "a/\344\275\234\344\270\232\345\237\272\347\241\2001/SinglyLinkedList.java" "b/\344\275\234\344\270\232\345\237\272\347\241\2001/SinglyLinkedList.java" new file mode 100644 index 0000000..06a93b3 --- /dev/null +++ "b/\344\275\234\344\270\232\345\237\272\347\241\2001/SinglyLinkedList.java" @@ -0,0 +1,165 @@ +package 作业基础1; + +public class SinglyLinkedList{ + + private class Node{ + private T value; + private Node next; + public Node(T value){ + this.value=value; + this.next=null; + }//constructor + } + + private Node head; + private Node tail; + public SinglyLinkedList(){ + this.head=null; + this.tail=null; + } + //empty list? + public boolean Empty(){ + return this.head==null; + }; + + //add to front + //两种情况:链表为空和正常 + public void PushFront(T key){ + Node node=new Node(key); + node.next=this.head; + this.head=node; + if(this.tail==null) this.tail=this.head;//原本无元素的话,需要将尾节点设置为刚插入的新节点 + } + //return front item + public T TopFront(){ + if(Empty()) throw new IndexOutOfBoundsException("linked list is empty"); + return head.value; + } + //remove front item + //两种情况:只有一个元素和正常 + public void PopFront(){ + if(Empty()) return; + this.head=this.head.next; + if(this.head==null) this.tail=null;//只有一个元素,pop后变为空链表 + } + //add to back + public void PushBack(T key){ + Node node=new Node(key); + if(this.tail==null){ + this.head=this.tail=node; + } + else{ + this.tail.next=node; + this.tail=node; + } + } + //return back item + public T TopBack(){ + if(Empty()) throw new IndexOutOfBoundsException("linked list is empty"); + return tail.value; + } + //remove back item + //三种情况:只有一个元素和两个元素和正常 + public void PopBack(){ + if(Empty()) return; + if(this.head==this.tail) this.head=this.tail=null;//只有一个元素,无法遍历到倒数第二个 + else { + Node node = this.head; + while (node.next.next != null) node = node.next;//遍历到倒数第二个元素 + this.tail = node; + node.next=null; + } + } + //is key in list? + public boolean Find(T key){ + Node node=this.head; + while(node!=null){ + if(node.value==key) return true; + node=node.next; + } + return false; + } + //remove key from list + public void Erase(T key){ + Node node=this.head; + while(node!=null){ + if(node.value==key){ + if(this.head==this.tail) { + this.head = this.tail = null;//只有一个元素 + break; + } + + else if(node==this.head) this.head=this.head.next;//删除的是头元素 + else{ + Node temp=this.head; + while(temp.next!=node) temp=temp.next;//遍历到node的前一个节点 + temp.next=node.next; + if(node==this.tail) this.tail=temp;//如果删除的是尾节点,要改变尾节点 + } + } + node=node.next; + } + } + //adds keys before node + public void AddBefore(Node node,T key){ + Node New=new Node(key); + if(node==this.head){ + New.next=this.head; + this.head=New; + }//插在头节点前不用遍历 + else{ + Node temp=this.head; + while(temp!=null){ + if(temp.next==node){ + temp.next=New; + New.next=node; + } + temp=temp.next; + } + } + } + //adds key after node + public void AddAfter(Node node,T key){ + Node New=new Node(key); + New.next=node.next; + node.next=New; + if(node==this.tail) this.tail=New;//如果插在尾节点后要变更尾节点 + } + //print the value of the whole linked list + public void Print(){ + Node node=this.head; + while(node!=null) { + System.out.print(node.value+" "); + node=node.next; + } + System.out.println(); + } + + public Node getHead(){ + return head; + } + + public Node getNode(){ + return head.next.next.next; + } + + public static void main(String[] args){ + SinglyLinkedList list= new SinglyLinkedList<>(); + for(int i=5;i>0;i--) list.PushFront(i);//test PushFront + for(int i=6;i<11;i++) list.PushBack(i);//test PushBackT + list.Print(); + System.out.println(list.TopFront()+" "+list.TopBack());//test TopFront and TopBack + list.PopFront(); + list.PopBack(); + list.Print(); + list.AddBefore(list.getHead(),11); + list.AddBefore(list.getNode(),12); + list.Print(); + list.AddAfter(list.getHead(),13); + list.AddAfter(list.getNode(),14); + list.Print(); + System.out.println(list.Find(22)+" "+list.Find(9)); + list.Erase(11); + list.Print(); + } +} \ No newline at end of file diff --git "a/\344\275\234\344\270\232\345\237\272\347\241\2002/SinglyLinkedList.java" "b/\344\275\234\344\270\232\345\237\272\347\241\2002/SinglyLinkedList.java" new file mode 100644 index 0000000..23e3547 --- /dev/null +++ "b/\344\275\234\344\270\232\345\237\272\347\241\2002/SinglyLinkedList.java" @@ -0,0 +1,165 @@ +package 作业基础2; + +public class SinglyLinkedList{ + + private class Node{ + private T value; + private Node next; + public Node(T value){ + this.value=value; + this.next=null; + }//constructor + } + + private Node head; + private Node tail; + public SinglyLinkedList(){ + this.head=null; + this.tail=null; + } + //empty list? + public boolean Empty(){ + return this.head==null; + }; + + //add to front + //两种情况:链表为空和正常 + public void PushFront(T key){ + Node node=new Node(key); + node.next=this.head; + this.head=node; + if(this.tail==null) this.tail=this.head;//原本无元素的话,需要将尾节点设置为刚插入的新节点 + } + //return front item + public T TopFront(){ + if(Empty()) throw new IndexOutOfBoundsException("linked list is empty"); + return head.value; + } + //remove front item + //两种情况:只有一个元素和正常 + public void PopFront(){ + if(Empty()) return; + this.head=this.head.next; + if(this.head==null) this.tail=null;//只有一个元素,pop后变为空链表 + } + //add to back + public void PushBack(T key){ + Node node=new Node(key); + if(this.tail==null){ + this.head=this.tail=node; + } + else{ + this.tail.next=node; + this.tail=node; + } + } + //return back item + public T TopBack(){ + if(Empty()) throw new IndexOutOfBoundsException("linked list is empty"); + return tail.value; + } + //remove back item + //三种情况:只有一个元素和两个元素和正常 + public void PopBack(){ + if(Empty()) return; + if(this.head==this.tail) this.head=this.tail=null;//只有一个元素,无法遍历到倒数第二个 + else { + Node node = this.head; + while (node.next.next != null) node = node.next;//遍历到倒数第二个元素 + this.tail = node; + node.next=null; + } + } + //is key in list? + public boolean Find(T key){ + Node node=this.head; + while(node!=null){ + if(node.value==key) return true; + node=node.next; + } + return false; + } + //remove key from list + public void Erase(T key){ + Node node=this.head; + while(node!=null){ + if(node.value==key){ + if(this.head==this.tail) { + this.head = this.tail = null;//只有一个元素 + break; + } + + else if(node==this.head) this.head=this.head.next;//删除的是头元素 + else{ + Node temp=this.head; + while(temp.next!=node) temp=temp.next;//遍历到node的前一个节点 + temp.next=node.next; + if(node==this.tail) this.tail=temp;//如果删除的是尾节点,要改变尾节点 + } + } + node=node.next; + } + } + //adds keys before node + public void AddBefore(Node node,T key){ + Node New=new Node(key); + if(node==this.head){ + New.next=this.head; + this.head=New; + }//插在头节点前不用遍历 + else{ + Node temp=this.head; + while(temp!=null){ + if(temp.next==node){ + temp.next=New; + New.next=node; + } + temp=temp.next; + } + } + } + //adds key after node + public void AddAfter(Node node,T key){ + Node New=new Node(key); + New.next=node.next; + node.next=New; + if(node==this.tail) this.tail=New;//如果插在尾节点后要变更尾节点 + } + //print the value of the whole linked list + public void Print(){ + Node node=this.head; + while(node!=null) { + System.out.print(node.value+" "); + node=node.next; + } + System.out.println(); + } + + public Node getHead(){ + return head; + } + + public Node getNode(){ + return head.next.next.next; + } + + public static void main(String[] args){ + SinglyLinkedList list= new SinglyLinkedList<>(); + for(int i=5;i>0;i--) list.PushFront(i);//test PushFront + for(int i=6;i<11;i++) list.PushBack(i);//test PushBackT + list.Print(); + System.out.println(list.TopFront()+" "+list.TopBack());//test TopFront and TopBack + list.PopFront(); + list.PopBack(); + list.Print(); + list.AddBefore(list.getHead(),11); + list.AddBefore(list.getNode(),12); + list.Print(); + list.AddAfter(list.getHead(),13); + list.AddAfter(list.getNode(),14); + list.Print(); + System.out.println(list.Find(22)+" "+list.Find(9)); + list.Erase(11); + list.Print(); + } +} \ No newline at end of file diff --git "a/\344\275\234\344\270\232\345\237\272\347\241\2003/DoublyLinkedList.java" "b/\344\275\234\344\270\232\345\237\272\347\241\2003/DoublyLinkedList.java" new file mode 100644 index 0000000..abdcf92 --- /dev/null +++ "b/\344\275\234\344\270\232\345\237\272\347\241\2003/DoublyLinkedList.java" @@ -0,0 +1,169 @@ +package 作业基础3; + +public class DoublyLinkedList { + private class Node{ + private T value; + private Node next; + private Node prev; + public Node(T value){ + this.value=value; + this.next=null; + this.prev=null; + } + } + + private Node head; + private Node tail; + public DoublyLinkedList(){ + this.head=null; + this.tail=null; + } + //empty list? + public boolean Empty(){ + return this.head==null; + } + //add to front + //两种情况:链表为空和正常 + public void PushFront(T key){ + Node node=new Node(key);//node.prev=null; + node.next=this.head; + this.head=node; + if(this.tail==null) this.tail=this.head;//原本无元素的话,需要将尾节点设置为刚插入的新节点 + else this.head.next.prev=node;//原本有元素的话设置原head的prev节点 + } + //return front item + public T TopFront(){ + if(Empty()) throw new IndexOutOfBoundsException("linked list is empty"); + return head.value; + } + //remove front item + //两种情况:只有一个元素和正常 + public void PopFront(){ + if(Empty()) return; + if(this.head!=this.tail) this.head.next.prev=null;//两个元素及以上要设置prev节点 + this.head=this.head.next; + if(this.head==null) this.tail=null;//只有一个元素,pop后变为空链表 + } + //add to back + public void PushBack(T key){ + Node node=new Node(key); + if(this.tail==null){ + this.head=this.tail=node; + } + else{ + this.tail.next=node; + node.prev=this.tail; + this.tail=node; + } + } + //return back item + public T TopBack(){ + if(Empty()) throw new IndexOutOfBoundsException("linked list is empty"); + return tail.value; + } + //remove back item + //拥有prev节点后无须从头遍历 + public void PopBack(){ + if(Empty()) return; + if(this.head==this.tail) this.head=this.tail=null; + else{ + this.tail=this.tail.prev; + this.tail.next=null; + } + } + //is key in list? + public boolean Find(T key){ + Node node=this.head; + while(node!=null){ + if(node.value==key) return true; + node=node.next; + } + return false; + } + //remove key from list + public void Erase(T key){ + Node node=this.head; + while(node!=null){ + if(node.value==key){ + if(this.head==this.tail){ + this.head=this.tail=null;//只有一个元素 + break; + } + else if(node==this.head) { + this.head=this.head.next;//删除的是头元素 + this.head.prev=null; + } + else{ + node.prev.next=node.next; + if(node==this.tail) this.tail=node.prev;//如果删除的是尾节点,要改变尾节点 + else node.next.prev=node.prev; //非尾节点要改变被删节点的下一个节点的prev + } + } + node=node.next; + } + } + //adds keys before node + //拥有prev节点后不用遍历 + public void AddBefore(Node node, T key){ + Node New=new Node(key); + if(node==this.head){ + New.next=this.head; + this.head.prev=New; + this.head=New; + } + else{ + node.prev.next=New;//改变被插入节点前一个节点的next节点 + New.prev=node.prev;//设置插入节点的prev节点 + New.next=node; + node.prev=New; + } + } + //adds key after node + public void AddAfter(Node node, T key){ + Node New=new Node(key); + New.next=node.next; + New.prev=node; + node.next=New; + if(node==this.tail) this.tail=New;//如果插在尾节点后要变更尾节点 + else node.next.prev=New;//插入的不在尾节点后,就需要要改变插入位置后一个节点的prev节点 + } + //print the value of the whole linked list + public void Print(){ + Node node=this.head; + while(node!=null) { + System.out.print(node.value+" "); + node=node.next; + } + System.out.println(); + } + + public Node getHead(){ + return head; + } + + public Node getNode(){ + return head.next.next.next; + } + + public static void main(String[] args){ + DoublyLinkedList list= new DoublyLinkedList<>(); + for(int i=5;i>0;i--) list.PushFront(i);//test PushFront + for(int i=6;i<11;i++) list.PushBack(i);//test PushBackT + list.Print(); + System.out.println(list.TopFront()+" "+list.TopBack());//test TopFront and TopBack + list.PopFront(); + list.PopBack(); + list.Print(); + list.AddBefore(list.getHead(),11); + list.AddBefore(list.getNode(),12); + list.Print(); + list.AddAfter(list.getHead(),13); + list.AddAfter(list.getNode(),14); + list.Print(); + System.out.println(list.Find(22)+" "+list.Find(9)); + list.Erase(11); + list.Erase(9); + list.Erase(13); + list.Print(); + } +} -- Gitee From 8b859109fed4ffb61df97955bb6d4068581ccba8 Mon Sep 17 00:00:00 2001 From: chenhongchao Date: Tue, 3 Nov 2020 22:22:00 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SinglyLinkedList$Node.class" | Bin 0 -> 1260 bytes .../SinglyLinkedList.class" | Bin 0 -> 5311 bytes .../SinglyLinkedList$Node.class" | Bin 0 -> 1260 bytes .../SinglyLinkedList.class" | Bin 0 -> 5311 bytes .../DoublyLinkedList$Node.class" | Bin 0 -> 1462 bytes .../DoublyLinkedList.class" | Bin 0 -> 5361 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 "out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2001/SinglyLinkedList$Node.class" create mode 100644 "out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2001/SinglyLinkedList.class" create mode 100644 "out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2002/SinglyLinkedList$Node.class" create mode 100644 "out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2002/SinglyLinkedList.class" create mode 100644 "out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2003/DoublyLinkedList$Node.class" create mode 100644 "out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2003/DoublyLinkedList.class" diff --git "a/out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2001/SinglyLinkedList$Node.class" "b/out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2001/SinglyLinkedList$Node.class" new file mode 100644 index 0000000000000000000000000000000000000000..32b32ef4f8d689f02d6e8ade3ec55ffe94922fe9 GIT binary patch literal 1260 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 literal 0 HcmV?d00001 diff --git "a/out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2002/SinglyLinkedList$Node.class" "b/out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2002/SinglyLinkedList$Node.class" new file mode 100644 index 0000000000000000000000000000000000000000..282d0aa9c49ef1bddf5d4aadb7bccf68f3191bdc GIT binary patch literal 1260 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 literal 0 HcmV?d00001 diff --git "a/out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2003/DoublyLinkedList.class" "b/out/production/lec02-linkedlist/\344\275\234\344\270\232\345\237\272\347\241\2003/DoublyLinkedList.class" new file mode 100644 index 0000000000000000000000000000000000000000..b5584eb64405318e7455d3152cac2fa041417545 GIT binary patch literal 5361 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 literal 0 HcmV?d00001 -- Gitee