From fc87380bc584d562ec4e7dd64a2a270c613dcd2d Mon Sep 17 00:00:00 2001 From: mygitf <“940580927@.qq.com> Date: Tue, 3 Nov 2020 23:43:49 +0800 Subject: [PATCH 1/4] =?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 --- "\344\275\234\344\270\232\344\270\200" | 1 + 1 file changed, 1 insertion(+) create mode 160000 "\344\275\234\344\270\232\344\270\200" diff --git "a/\344\275\234\344\270\232\344\270\200" "b/\344\275\234\344\270\232\344\270\200" new file mode 160000 index 0000000..88424cf --- /dev/null +++ "b/\344\275\234\344\270\232\344\270\200" @@ -0,0 +1 @@ +Subproject commit 88424cf375f3d9de57bf66d63e85c197f706302d -- Gitee From 8aca34b52a43cb0db41bcb2701448e45b735191d Mon Sep 17 00:00:00 2001 From: mygitf <“940580927@.qq.com> Date: Wed, 4 Nov 2020 08:53:29 +0800 Subject: [PATCH 2/4] delete --- "\344\275\234\344\270\232\344\270\200" | 1 - 1 file changed, 1 deletion(-) delete mode 160000 "\344\275\234\344\270\232\344\270\200" diff --git "a/\344\275\234\344\270\232\344\270\200" "b/\344\275\234\344\270\232\344\270\200" deleted file mode 160000 index 88424cf..0000000 --- "a/\344\275\234\344\270\232\344\270\200" +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 88424cf375f3d9de57bf66d63e85c197f706302d -- Gitee From 24cca96e49335cf6c0a951b76b54e113787ae1fb Mon Sep 17 00:00:00 2001 From: mygitf <“940580927@.qq.com> Date: Wed, 4 Nov 2020 08:54:09 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DoublyLinkedList.java" | 158 ++++++++++++++++ .../Node.java" | 177 ++++++++++++++++++ .../Node.java" | 177 ++++++++++++++++++ 3 files changed, 512 insertions(+) create mode 100644 "\344\275\234\344\270\232\344\270\200/\345\217\214\345\220\221\351\223\276\350\241\250/DoublyLinkedList.java" create mode 100644 "\344\275\234\344\270\232\344\270\200/\345\256\236\347\216\260\345\215\225\351\223\276\350\241\250/Node.java" create mode 100644 "\344\275\234\344\270\232\344\270\200/\345\260\276\346\214\207\351\222\210\347\232\204\345\215\225\351\223\276\350\241\250/Node.java" diff --git "a/\344\275\234\344\270\232\344\270\200/\345\217\214\345\220\221\351\223\276\350\241\250/DoublyLinkedList.java" "b/\344\275\234\344\270\232\344\270\200/\345\217\214\345\220\221\351\223\276\350\241\250/DoublyLinkedList.java" new file mode 100644 index 0000000..5d1aff5 --- /dev/null +++ "b/\344\275\234\344\270\232\344\270\200/\345\217\214\345\220\221\351\223\276\350\241\250/DoublyLinkedList.java" @@ -0,0 +1,158 @@ +package com.Node.LinkList; + +public class DoublyLinkedList { + public static void main(String[] args){ + DoublyLinkedList list= new DoublyLinkedList<>(); + for(int i=6;i>0;i--) list.PushFront(i); + for(int i=4;i<11;i++) list.PushBack(i); + System.out.println(list.TopFront()+" "+list.TopBack());//test TopFront and TopBack + list.AddAfter(list.getNode(),14); + System.out.println(list.Find(22)+" "+list.Find(9)); + list.Erase(11); + } + //创建节点 + 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; + } + +} diff --git "a/\344\275\234\344\270\232\344\270\200/\345\256\236\347\216\260\345\215\225\351\223\276\350\241\250/Node.java" "b/\344\275\234\344\270\232\344\270\200/\345\256\236\347\216\260\345\215\225\351\223\276\350\241\250/Node.java" new file mode 100644 index 0000000..66fc15a --- /dev/null +++ "b/\344\275\234\344\270\232\344\270\200/\345\256\236\347\216\260\345\215\225\351\223\276\350\241\250/Node.java" @@ -0,0 +1,177 @@ + public class Node { + public static void main(String[] args) { + Link link = new Link(); + // + link.add(12); + link.add(34); + link.add(56); + link.add(78); + link.add(90); + // б + for (int i = 0; i < link.getSize(); i++) { + // ȡԪ + int e = link.get(i); + // Ԫ + System.out.println("" + i + "Ԫǣ" + e); + + } + } + + int data; + Node next; + + public Node() { + } + + public Node(int data) { + this.data = data; + } +} + +interface myList { + // 洢 + public void add(int e); + + // + public void insert(int e, int index); + + // ɾ + public void delete(int index); + // ȡԪ + + public int get(int index); + + // ޸ + public void modify(int e, int index); + + // ȡԪظ + public int getSize(); +} + +class Link implements myList { + Node head; + // ͷ + Node temp = head; + // Ԫظ + int size; + + public Link() { + head = new Node(); + temp = head; + size = 0; + } + + @Override + public void add(int e) { + + // һµĽ + Node node = new Node(e); + // һڵΪ½ + temp.next = node; + // ½ + temp = node; + // Ԫظһ + size++; + + } + + @Override + public void insert(int e, int index) { + checkindex(index); + Node node = head.next; + // ҵ±index + for (int i = 0; i < index; i++) { + node = node.next; + } + // ҵ±index-1 + Node node1 = head.next; + for (int i = 0; i < index - 1; i++) { + node1 = node1.next; + } + // һ½ڵ㣬ΪҪĽڵ + Node node2 = new Node(e); + if (index == 0) {// λǵһڵ + head.next = null; + head.next = node2; + } else { + node1.next = null; + node1.next = node2; + } + node2.next = node; + size++; + + } + + @Override + public void delete(int index) { + checkindex(index); + Node node = head.next; + // ҵ±index + for (int i = 0; i < index; i++) { + node = node.next; + } + // ҵ±index-1 + Node node1 = head.next; + for (int i = 0; i < index - 1; i++) { + node1 = node1.next; + } + if (index != 0) {// index0ǵһڵ + if (index == size - 1) {// һ + node1.next = null; + } else {// 費һ + node1.next = null; + node1.next = node.next; + } + // nodeָΪգnodeֵΪ + node.next = null; + node.data = 0; + } else {// index0 + head.next = null; + head.next = node.next; + node.next = null; + node.data = 0; + } + size--; + + } + + @Override + public int get(int index) { + // ҵ±index + Node node = head.next; + // ͷڵ㿪ʼ + for (int i = 0; i < index; i++) { + node = node.next; + } + + return node.data; + + } + + @Override + public void modify(int e, int index) { + // ҵ±index + Node node = head.next; + // ͷڵ㿪ʼ + for (int i = 0; i < index; i++) { + node = node.next; + } + Node node1 = new Node(e); + node.data = e; + + } + + @Override + public int getSize() { + // TODO Auto-generated method stub + return size; + } + + // indexֵǷϸ + public void checkindex(int index) { + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException("Ҫ"); + } + } + +} diff --git "a/\344\275\234\344\270\232\344\270\200/\345\260\276\346\214\207\351\222\210\347\232\204\345\215\225\351\223\276\350\241\250/Node.java" "b/\344\275\234\344\270\232\344\270\200/\345\260\276\346\214\207\351\222\210\347\232\204\345\215\225\351\223\276\350\241\250/Node.java" new file mode 100644 index 0000000..d90252f --- /dev/null +++ "b/\344\275\234\344\270\232\344\270\200/\345\260\276\346\214\207\351\222\210\347\232\204\345\215\225\351\223\276\350\241\250/Node.java" @@ -0,0 +1,177 @@ +public class Node { + public static void main(String[] args) { + Link link = new Link(); + // + link.add(12); + link.add(34); + link.add(56); + link.add(78); + link.add(90); + // б + for (int i = 0; i < link.getSize(); i++) { + // ȡԪ + int e = link.get(i); + // Ԫ + System.out.println("" + i + "Ԫǣ" + e); + + } + } + + int data; + Node next; + + public Node() { + } + + public Node(int data) { + this.data = data; + } +} + +interface myList { + // 洢 + public void add(int e); + + // + public void insert(int e, int index); + + // ɾ + public void delete(int index); + // ȡԪ + + public int get(int index); + + // ޸ + public void modify(int e, int index); + + // ȡԪظ + public int getSize(); +} + +class Link implements myList { + + // ͷ㣬βڵ + Node head,tail; + // Ԫظ + int size; + + public Link() { + head = new Node(); + tail = head; + size = 0; + } + + @Override + public void add(int e) { + + // һµĽ + Node node = new Node(e); + // βһڵΪ½ + tail.next = node; + // βΪ½ + tail = node; + // Ԫظһ + size++; + + } + + @Override + public void insert(int e, int index) { + checkindex(index); + Node node = head.next; + // ҵ±index + for (int i = 0; i < index; i++) { + node = node.next; + } + // ҵ±index-1 + Node node1 = head.next; + for (int i = 0; i < index - 1; i++) { + node1 = node1.next; + } + // һ½ڵ㣬ΪҪĽڵ + Node node2 = new Node(e); + if (index == 0) {// λǵһڵ + head.next = null; + head.next = node2; + } else { + node1.next = null; + node1.next = node2; + } + node2.next = node; + size++; + + } + + @Override + public void delete(int index) { + checkindex(index); + Node node = head.next; + // ҵ±index + for (int i = 0; i < index; i++) { + node = node.next; + } + // ҵ±index-1 + Node node1 = head.next; + for (int i = 0; i < index - 1; i++) { + node1 = node1.next; + } + if (index != 0) {// index0ǵһڵ + if (index == size - 1) {// һ + node1.next = null; + } else {// 費һ + node1.next = null; + node1.next = node.next; + } + // nodeָΪգnodeֵΪ + node.next = null; + node.data = 0; + } else {// index0 + head.next = null; + head.next = node.next; + node.next = null; + node.data = 0; + } + size--; + + } + + @Override + public int get(int index) { + // ҵ±index + Node node = head.next; + // ͷڵ㿪ʼ + for (int i = 0; i < index; i++) { + node = node.next; + } + + return node.data; + + } + + @Override + public void modify(int e, int index) { + // ҵ±index + Node node = head.next; + // ͷڵ㿪ʼ + for (int i = 0; i < index; i++) { + node = node.next; + } + Node node1 = new Node(e); + node.data = e; + + } + + @Override + public int getSize() { + // TODO Auto-generated method stub + return size; + } + + // indexֵǷϸ + public void checkindex(int index) { + if (index < 0 || index > size) { + throw new IndexOutOfBoundsException("Ҫ"); + } + } + +} -- Gitee From 70caa8f4f7b68952a468538ef89af2c57e84aaf5 Mon Sep 17 00:00:00 2001 From: mygitf <“940580927@.qq.com> Date: Sun, 15 Nov 2020 19:49:23 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E4=B8=80=20=E8=BF=9B?= =?UTF-8?q?=E9=98=B6=E7=BB=83=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LRULinkedHashMap.java" | 81 ++++++++++++++ .../BuildList.java" | 100 ++++++++++++++++++ .../MontageLinkedList.java" | 56 ++++++++++ .../JavaTest1.java" | 78 ++++++++++++++ .../ListNode2.java" | 32 ++++++ 5 files changed, 347 insertions(+) create mode 100644 "\344\275\234\344\270\232\344\270\200/LRU \347\274\223\345\255\230\346\267\230\346\261\260\347\256\227\346\263\225\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260(optional)/LRULinkedHashMap.java" create mode 100644 "\344\275\234\344\270\232\344\270\200/\344\270\244\344\270\252\346\234\211\345\272\217\347\232\204\351\223\276\350\241\250\345\220\210\345\271\266/BuildList.java" create mode 100644 "\344\275\234\344\270\232\344\270\200/\345\210\240\351\231\244\345\217\214\345\220\221\351\223\276\350\241\250\345\200\222\346\225\260\347\254\254 n \344\270\252\347\273\223\347\202\271/MontageLinkedList.java" create mode 100644 "\344\275\234\344\270\232\344\270\200/\345\215\225\351\223\276\350\241\250\345\217\215\350\275\254/JavaTest1.java" create mode 100644 "\344\275\234\344\270\232\344\270\200/\346\261\202\351\223\276\350\241\250\347\232\204\344\270\255\351\227\264\347\273\223\347\202\271/ListNode2.java" diff --git "a/\344\275\234\344\270\232\344\270\200/LRU \347\274\223\345\255\230\346\267\230\346\261\260\347\256\227\346\263\225\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260(optional)/LRULinkedHashMap.java" "b/\344\275\234\344\270\232\344\270\200/LRU \347\274\223\345\255\230\346\267\230\346\261\260\347\256\227\346\263\225\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260(optional)/LRULinkedHashMap.java" new file mode 100644 index 0000000..1480ba8 --- /dev/null +++ "b/\344\275\234\344\270\232\344\270\200/LRU \347\274\223\345\255\230\346\267\230\346\261\260\347\256\227\346\263\225\347\232\204\351\223\276\350\241\250\345\256\236\347\216\260(optional)/LRULinkedHashMap.java" @@ -0,0 +1,81 @@ +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.Map; + +public class LRULinkedHashMap extends LinkedHashMap { + private final int maxCapacity; + + private static final float DEFAULT_LOAD_FACTOR = 0.75f; + + private final Lock lock = new ReentrantLock(); + + public LRULinkedHashMap(int maxCapacity) { + super(maxCapacity, DEFAULT_LOAD_FACTOR, true); + this.maxCapacity = maxCapacity; + } + + @Override + protected boolean removeEldestEntry(java.util.Map.Entry eldest) { + return size() > maxCapacity; + } + @Override + public boolean containsKey(Object key) { + try { + lock.lock(); + return super.containsKey(key); + } finally { + lock.unlock(); + } + } + + + @Override + public V get(Object key) { + try { + lock.lock(); + return super.get(key); + } finally { + lock.unlock(); + } + } + + @Override + public V put(K key, V value) { + try { + lock.lock(); + return super.put(key, value); + } finally { + lock.unlock(); + } + } + + public int size() { + try { + lock.lock(); + return super.size(); + } finally { + lock.unlock(); + } + } + + public void clear() { + try { + lock.lock(); + super.clear(); + } finally { + lock.unlock(); + } + } + + public Collection> getAll() { + try { + lock.lock(); + return new ArrayList>(super.entrySet()); + } finally { + lock.unlock(); + } + } +} \ No newline at end of file diff --git "a/\344\275\234\344\270\232\344\270\200/\344\270\244\344\270\252\346\234\211\345\272\217\347\232\204\351\223\276\350\241\250\345\220\210\345\271\266/BuildList.java" "b/\344\275\234\344\270\232\344\270\200/\344\270\244\344\270\252\346\234\211\345\272\217\347\232\204\351\223\276\350\241\250\345\220\210\345\271\266/BuildList.java" new file mode 100644 index 0000000..3059715 --- /dev/null +++ "b/\344\275\234\344\270\232\344\270\200/\344\270\244\344\270\252\346\234\211\345\272\217\347\232\204\351\223\276\350\241\250\345\220\210\345\271\266/BuildList.java" @@ -0,0 +1,100 @@ + public class BuildList { + public static void main(String[] args) { + BuildList bl1 = new BuildList(); + BuildList bl2 = new BuildList(); + for (int i = 0; i < 10; i++) { + if (i % 2 == 0) { + bl1.addNode(i); + } else { + continue; + } + + } + for (int i = 0; i < 10; i++) { + if (i % 2 != 0) { + bl2.addNode(i); + } else { + continue; + } + } + MergeSortedList msl = new MergeSortedList(); + msl.merge(bl1.head, bl2.head); + msl.printList(); + } + + public Node head = null; + + public void addNode(int k) { + Node newNode = new Node(k); + if (head == null) { + head = newNode; + return; + } + Node lastNode = head; + while (lastNode.next != null) { + lastNode = lastNode.next; + } + lastNode.next = newNode; + } + + public void printList() { + Node printNode = head; + while (printNode != null) { + System.out.println(printNode.data); + printNode = printNode.next; + } + } +} + +class Node { + public int data; + public Node next; + + public Node(int data) { + this.data = data; + } + +} + +class MergeSortedList { + public Node merge; + + public void merge(Node node_1, Node node_2) { + Node p1 = node_1; + Node p2 = node_2; + if (p1.data > p2.data) { + merge = p2; + p2 = p2.next; + + } else { + merge = p1; + p1 = p1.next; + } + Node p = merge; + while (p1 != null && p2 != null) { + if (p1.data >= p2.data) { + p.next = p2; + p2 = p2.next; + p = p.next; + } else { + p.next = p1; + p1 = p1.next; + p = p.next; + } + } + if (p1 != null) { + p.next = p1; + } + if (p2 != null) { + p.next = p2; + } + } + + public void printList() { + Node printNode = merge; + while (printNode != null) { + System.out.println(printNode.data); + printNode = printNode.next; + } + } +} \ No newline at end of file diff --git "a/\344\275\234\344\270\232\344\270\200/\345\210\240\351\231\244\345\217\214\345\220\221\351\223\276\350\241\250\345\200\222\346\225\260\347\254\254 n \344\270\252\347\273\223\347\202\271/MontageLinkedList.java" "b/\344\275\234\344\270\232\344\270\200/\345\210\240\351\231\244\345\217\214\345\220\221\351\223\276\350\241\250\345\200\222\346\225\260\347\254\254 n \344\270\252\347\273\223\347\202\271/MontageLinkedList.java" new file mode 100644 index 0000000..0d47d44 --- /dev/null +++ "b/\344\275\234\344\270\232\344\270\200/\345\210\240\351\231\244\345\217\214\345\220\221\351\223\276\350\241\250\345\200\222\346\225\260\347\254\254 n \344\270\252\347\273\223\347\202\271/MontageLinkedList.java" @@ -0,0 +1,56 @@ +public class MontageLinkedList { + + int value; + MontageLinkedList next; + + public MontageLinkedList(int val) { + value = val; + } + + + public static void main(String[] args) { + MontageLinkedList mon1 = new MontageLinkedList(3); + MontageLinkedList mon2 = new MontageLinkedList(4); + MontageLinkedList mon3 = new MontageLinkedList(9); + MontageLinkedList mon4 = new MontageLinkedList(29); + MontageLinkedList mon5 = new MontageLinkedList(20); + + mon1.next = mon2; + mon2.next = mon3; + mon3.next = mon4; + mon4.next = mon5; + + MontageLinkedList l = getMontageLink(3, mon1); + while(l != null) { + System.out.print(l.value + " "); + l = l.next; + } + + } + /** + * @param n + * @param li + * @return + * ˼· + * 1ָ룬һߣߵn+1λã + * 2ֱڶָ뿪ʼߣһָڶָ֮n + */ + public static MontageLinkedList getMontageLink(int n, MontageLinkedList li) { + MontageLinkedList list = new MontageLinkedList(0); + list.next = li; + MontageLinkedList first = list; + MontageLinkedList second = list; + + for(int i = 1; i < n + 1; i++) { + first = first.next; + } + + while(first != null) { + first = first.next; + second = second.next; + } + + second.next = second.next.next; + return list.next; + } +} \ No newline at end of file diff --git "a/\344\275\234\344\270\232\344\270\200/\345\215\225\351\223\276\350\241\250\345\217\215\350\275\254/JavaTest1.java" "b/\344\275\234\344\270\232\344\270\200/\345\215\225\351\223\276\350\241\250\345\217\215\350\275\254/JavaTest1.java" new file mode 100644 index 0000000..c391e83 --- /dev/null +++ "b/\344\275\234\344\270\232\344\270\200/\345\215\225\351\223\276\350\241\250\345\217\215\350\275\254/JavaTest1.java" @@ -0,0 +1,78 @@ + public class JavaTest1 { + public static void main(String[] args) { + Node head = new Node(0); + Node node1 = new Node(1); + Node node2 = new Node(2); + Node node3 = new Node(3); + + head.setNext(node1); + node1.setNext(node2); + node2.setNext(node3); + + // ӡתǰ + Node h = head; + while (null != h) { + System.out.print(h.getData() + " "); + h = h.getNext(); + } + // ÷ת + // head = reverse1(head); + head = reverse2(head); + + System.out.println("\n**************************"); + // ӡתĽ + while (null != head) { + System.out.print(head.getData() + " "); + head = head.getNext(); + } + } + + /** + * ǰڵһڵ㻺ĵǰڵָ + */ + public static Node reverse2(Node head) { + if (head == null) + return head; + Node pre = head;// һ + Node cur = head.getNext();// ǰ + Node tmp;// ʱ㣬ڱ浱ǰָ򣨼һ㣩 + while (cur != null) {// ǰΪnull˵λβ + tmp = cur.getNext(); + cur.setNext(pre);// תָָ + + // ָƶ + pre = cur; + cur = tmp; + } + // ԭͷڵָΪnullͷ㣬ԭβ + head.setNext(null); + + return pre; + } +} + +class Node { + private int Data;// + private Node Next;// ָ + + public Node(int Data) { + // super(); + this.Data = Data; + } + + public int getData() { + return Data; + } + + public void setData(int Data) { + this.Data = Data; + } + + public Node getNext() { + return Next; + } + + public void setNext(Node Next) { + this.Next = Next; + } +} \ No newline at end of file diff --git "a/\344\275\234\344\270\232\344\270\200/\346\261\202\351\223\276\350\241\250\347\232\204\344\270\255\351\227\264\347\273\223\347\202\271/ListNode2.java" "b/\344\275\234\344\270\232\344\270\200/\346\261\202\351\223\276\350\241\250\347\232\204\344\270\255\351\227\264\347\273\223\347\202\271/ListNode2.java" new file mode 100644 index 0000000..0995212 --- /dev/null +++ "b/\344\275\234\344\270\232\344\270\200/\346\261\202\351\223\276\350\241\250\347\232\204\344\270\255\351\227\264\347\273\223\347\202\271/ListNode2.java" @@ -0,0 +1,32 @@ + public class ListNode2 { + int val; + ListNode2 next; + + ListNode2(int x) { + val = x; + } + + +/** + * Ѱмڵ + * + * @param node + * @return + */ + public static ListNode2 middleNode(ListNode2 head) { + if (head == null || head.next == null) { + return head; + } + + ListNode2 slow = head; + ListNode2 fast = head.next; + + while (fast != null && fast.next != null) { + slow = slow.next; + fast = fast.next.next; + } + + + return fast == null ? slow : slow.next; +} +} \ No newline at end of file -- Gitee