diff --git a/src/leo/class02/LinkedList.java b/src/leo/class02/LinkedList.java new file mode 100644 index 0000000..2cb980c --- /dev/null +++ b/src/leo/class02/LinkedList.java @@ -0,0 +1,206 @@ +package leo.class02; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.List; + +/** + * @author Leo + * @ClassName LinkedList + * @DATE 2020/11/18 3:24 下午 + * @Description 链表练习 + * 单向链表 + * 双向链表 + * 链表翻转 + * + */ +public class LinkedList { + + public static class Node{ + int value; + Node next; + + + public Node(int value) { + this.value = value; + } + } + + public class DoubleNode{ + int value; + DoubleNode pre; + DoubleNode next; + public DoubleNode(int value) { + this.value = value; + } + } + + /** + * 功能描述 : 单链表翻转 + * @author Leo + * @date 2020/11/18 3:42 下午 + * @param head + * @return leo.class02.LinkedList.Node + */ + public static Node reverseNode(Node head) { + + Node pre = null; + Node next = null; + while (head != null) { + next = head.next; + head.next = pre; + pre = head; + head = next; + } + return pre; + } + + public static Node reverseNode1(Node head) { + Node pre = null; + Node next = null; + + while (head != null) { + next = head; + head.next = pre; + pre = head; + head = next; + } + return pre; + } + + public static Node reverseNode2(Node head) { + Node pre = null; + Node next = null; + while (head != null) { + next = head; + head.next = pre; + pre = head; + head = next; + } + return pre; + } + + public static Node reverseNode3(Node head) { + Node pre = null; + Node next = null; + while (head != null) { + next = head.next; + head.next = pre; + pre = head; + head = next; + } + return pre; + + } + + public static Node reverseNode4(Node head) { + Node pre = null; + 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; + DoubleNode next; + while (head != null) { + next = head.next; + head.pre = next; + head.next = pre; + pre = head; + head = next; + } + return pre; + } + + + /** + * 功能描述 : 随机生成单链表 + * @author Leo + * @date 2020/11/18 6:43 下午 + * @param sizeMax + * @param range + * @return leo.class02.LinkedList.Node + */ + public static Node randomNode(int sizeMax, int range) { + int size = (int) ((sizeMax + 1) * Math.random()); + if (size == 0) { + return null; + } + Node head = new Node(randomInt(range)); + Node pre = head; + size--; + while (size != 0) { + Node cur = new Node(randomInt(range)); + pre.next = cur; + pre = cur; + size--; + } + return head; + + } + + public static int randomInt(int range) { + return (int) (Math.random() * (range + 1)); + } + + /** + * 功能描述 : 验证单链表 + * @author Leo + * @date 2020/11/18 9:40 下午 + * @param nodeList + * @param node + * @return boolean + */ + public static boolean verifyReverseListAndNode(List nodeList, Node node) { + Node cur = node; + for (int i = nodeList.size() - 1; i >= 0; i--) { + if (cur==null||cur != nodeList.get(i)) { + return false; + } + cur = cur.next; + } + return true; + } + + /** + * 功能描述 : node转list + * @author Leo + * @date 2020/11/18 10:11 下午 + * @param node + * @return java.util.List + */ + public static List nodeToList(Node node) { + List list = new ArrayList<>(); + Node cur = node; + while (cur != null) { + list.add(cur); + cur = cur.next; + } + return list; + } + + public static void main(String[] args){ + int maxSize = 40; + int range = 90; + int testTime = 1000; + System.out.println("测试开始"); + for (int i = 0; i < testTime; i++) { + Node head = randomNode(maxSize, range); + List nodeList = nodeToList(head); + Node node = reverseNode4(head); + if (!verifyReverseListAndNode(nodeList, node)) { + System.out.println("nodeFuck!!"); + break; + } + } + System.out.println("测试结束"); + } + +}