From bae211d2e8adb132be56527726a705d10e0167e4 Mon Sep 17 00:00:00 2001 From: Leo <582717189@qq.com> Date: Fri, 20 Nov 2020 09:38:13 +0800 Subject: [PATCH] =?UTF-8?q?=E9=93=BE=E8=A1=A8=E7=BB=83=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/leo/class02/DeleteGivenValue.java | 52 +++++++++++++++++++++++++-- src/leo/class02/LinkedList.java | 29 +++++++++++++-- 2 files changed, 77 insertions(+), 4 deletions(-) diff --git a/src/leo/class02/DeleteGivenValue.java b/src/leo/class02/DeleteGivenValue.java index 4f59f2b..fb6e69b 100644 --- a/src/leo/class02/DeleteGivenValue.java +++ b/src/leo/class02/DeleteGivenValue.java @@ -85,6 +85,26 @@ public class DeleteGivenValue { } + + public static Node removeNodeOfValue2(Node head, int value) { + while (head != null) { + if (head.value != value) { + break; + } + head = head.next; + } + Node cur = head; + Node pre = head; + while (cur != null) { + if (cur.value == value) { + pre.next = cur.next; + }else{ + pre = cur; + } + cur = cur.next; + } + return head; + } /** * 功能描述 : 双链表删除某个给定值 * @author Leo @@ -162,12 +182,40 @@ public class DeleteGivenValue { while (cur != null) { if (cur.value == value) { pre.next = cur.next; + }else{ cur.pre = pre; + pre = cur; + } + cur = cur.next; + } + return head; + } + + public static DoubleNode removeDoubleNodeOfValue3(DoubleNode head, int value) { + while (head != null) { + if (head.value != value) { + break; + + } + head = head.next; + } + if (head != null && head.pre != null) { + head.pre = null; + } + DoubleNode cur = head; + DoubleNode pre = head; + while (cur != null) { + if (cur.value == value) { + pre.next = cur.next; }else{ + if (cur.pre != pre) { + cur.pre = pre; + } pre = cur; } cur = cur.next; } + return head; } @@ -277,14 +325,14 @@ public class DeleteGivenValue { for (int i = 0; i < testTime; i++) { int value = randomInt(range); Node nodeHead = randomNode(sizeMax, range); - Node node = removeNodeOfValue1(nodeHead, value); + Node node = removeNodeOfValue2(nodeHead, value); if (!verifyRemoveNodeOfValue(node,value)) { System.out.println("node fuck!"); break; } DoubleNode doubleNodeHead = randomDoubleNode(sizeMax, range); - DoubleNode doubleNode = removeDoubleNodeOfValue2(doubleNodeHead, value); + DoubleNode doubleNode = removeDoubleNodeOfValue3(doubleNodeHead, value); if (!verifyRemoveDoubleNodeOfValue(doubleNode, value)) { System.out.println("doubleNode fuck"); break; diff --git a/src/leo/class02/LinkedList.java b/src/leo/class02/LinkedList.java index a5d0acb..8365470 100644 --- a/src/leo/class02/LinkedList.java +++ b/src/leo/class02/LinkedList.java @@ -118,6 +118,17 @@ public class LinkedList { return pre; } + public static Node reverseNode6(Node head) { + Node pre = head; + Node next = null; + while (head != null) { + next = head.next; + head.next = pre; + pre = head; + head = next; + } + return pre; + } public static DoubleNode reverseDoubleNode(DoubleNode head) { DoubleNode pre = null; @@ -158,6 +169,20 @@ public class LinkedList { return pre; } + public static DoubleNode reverseDoublerNode3(DoubleNode head) { + DoubleNode pre = head; + DoubleNode next = null; + while (head != null) { + next = head.next; + head.next = pre; + head.pre = head.next; + pre = head; + head = next; + } + return pre; + + } + /** * 功能描述 : 随机生成单链表 * @author Leo @@ -288,14 +313,14 @@ public class LinkedList { for (int i = 0; i < testTime; i++) { Node head = randomNode(maxSize, range); List nodeList = nodeToList(head); - Node node = reverseNode5(head); + Node node = reverseNode6(head); if (!verifyReverseListAndNode(nodeList, node)) { System.out.println("nodeFuck!!"); break; } DoubleNode doubleNodeHead = randomDoubleNode(maxSize, range); List doubleNodeList = DoubleNodeToList(doubleNodeHead); - DoubleNode doubleNode = reverseDoubleNode2(doubleNodeHead); + DoubleNode doubleNode = reverseDoublerNode3(doubleNodeHead); if (!verifyReverseListAndDoubleNode(doubleNodeList, doubleNode)) { System.out.println("doubleNodeFuck!!"); break;