diff --git a/ArrayAndLink/Daryl_206.png b/ArrayAndLink/Daryl_206.png deleted file mode 100644 index e5664f8a6a6366bae782b4df966f6e8b41187a46..0000000000000000000000000000000000000000 Binary files a/ArrayAndLink/Daryl_206.png and /dev/null differ diff --git a/ArrayAndLink/Jayson_141/Y5`@U({U7AZ)VU579]X]M65.png b/ArrayAndLink/Jayson_141/Y5`@U({U7AZ)VU579]X]M65.png new file mode 100644 index 0000000000000000000000000000000000000000..7eb204e5245a48f0494bac51a886bca7c6f6c0fc Binary files /dev/null and b/ArrayAndLink/Jayson_141/Y5`@U({U7AZ)VU579]X]M65.png differ diff --git a/ArrayAndLink/Jayson_206/9[)YN9UF%SB4~%I2I4K}HFJ.png b/ArrayAndLink/Jayson_206/9[)YN9UF%SB4~%I2I4K}HFJ.png new file mode 100644 index 0000000000000000000000000000000000000000..b6d58cc0d610bd6f03307a510016497ccd43ef39 Binary files /dev/null and b/ArrayAndLink/Jayson_206/9[)YN9UF%SB4~%I2I4K}HFJ.png differ diff --git a/ArrayAndLink/Jayson_206/RO2~9@1[W@IR8SP7RVG1)ZH.png b/ArrayAndLink/Jayson_206/RO2~9@1[W@IR8SP7RVG1)ZH.png new file mode 100644 index 0000000000000000000000000000000000000000..35ff3b999bc413f0b0238d7ac07aab799c115e72 Binary files /dev/null and b/ArrayAndLink/Jayson_206/RO2~9@1[W@IR8SP7RVG1)ZH.png differ diff --git a/ArrayAndLink/LinkedList/Kilien/LeetCode 148.Sort List.jpg b/ArrayAndLink/LinkedList/Kilien/LeetCode 148.Sort List.jpg new file mode 100644 index 0000000000000000000000000000000000000000..751a7c57cafc63e722f8be9225867f93e4b58e26 Binary files /dev/null and b/ArrayAndLink/LinkedList/Kilien/LeetCode 148.Sort List.jpg differ diff --git a/ArrayAndLink/LinkedList/Kilien/Leetcode 141.Linked List Cycle.jpg b/ArrayAndLink/LinkedList/Kilien/Leetcode 141.Linked List Cycle.jpg new file mode 100755 index 0000000000000000000000000000000000000000..f4f453020e9ceec4b6fffe72a95489306afabe61 Binary files /dev/null and b/ArrayAndLink/LinkedList/Kilien/Leetcode 141.Linked List Cycle.jpg differ diff --git a/ArrayAndLink/LinkedList/Kilien/Leetcode 206.Reverse Linked List.jpg b/ArrayAndLink/LinkedList/Kilien/Leetcode 206.Reverse Linked List.jpg new file mode 100755 index 0000000000000000000000000000000000000000..91d6549221b27f1bc80f3725fd903112c7c1886b Binary files /dev/null and b/ArrayAndLink/LinkedList/Kilien/Leetcode 206.Reverse Linked List.jpg differ diff --git a/ArrayAndLink/LinkedList/Kilien/Leetcode 24.Swap Nodes in Pairs.jpg b/ArrayAndLink/LinkedList/Kilien/Leetcode 24.Swap Nodes in Pairs.jpg new file mode 100755 index 0000000000000000000000000000000000000000..77ef0c7f745c25028983d72680812a634f75a269 Binary files /dev/null and b/ArrayAndLink/LinkedList/Kilien/Leetcode 24.Swap Nodes in Pairs.jpg differ diff --git a/ArrayAndLink/LinkedList/Kilien/LinkedListCycle.py b/ArrayAndLink/LinkedList/Kilien/LinkedListCycle.py new file mode 100755 index 0000000000000000000000000000000000000000..c81783ee480ec4ed6de89f6f7fd53c5476812aca --- /dev/null +++ b/ArrayAndLink/LinkedList/Kilien/LinkedListCycle.py @@ -0,0 +1,41 @@ +# Author:kilien +# Leetcode 141.Linked List Cycle +# 思路1:使用set记录链表元素,重复即有环 +# time:O(n) space:O(n) +# Definition for singly-linked list. +# class ListNode(object): +# def __init__(self, x): +# self.val = x +# self.next = None +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + key = set() + while head: + if head in key: + return True + else: + key.add(head) + head = head.next + return False + + +# 思路2:使用快慢指针,当两者相遇则有环 +# time:O(n) space:O(1) + +class Solution(object): + def hasCycle(self, head): + """ + :type head: ListNode + :rtype: bool + """ + fast = slow = head + while fast and slow and fast.next: + fast = fast.next.next + slow = slow.next + if fast is slow: + return True + return False \ No newline at end of file diff --git a/ArrayAndLink/LinkedList/Kilien/SortList.py b/ArrayAndLink/LinkedList/Kilien/SortList.py new file mode 100644 index 0000000000000000000000000000000000000000..5926bbc6c128952246c90f698d93d6fb7aac19cf --- /dev/null +++ b/ArrayAndLink/LinkedList/Kilien/SortList.py @@ -0,0 +1,31 @@ +# Author:kilien +# 思路:归并排序,分解链表,化整为零,再自底向上合并排序 +# time:O(nlogn) space:O(nloagn) +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, x): +# self.val = x +# self.next = None + +class Solution(object): + def merge(self, h1, h2): + dummy = tail = ListNode(None) + while h1 and h2: + if h1.val < h2.val: + tail.next, tail, h1 = h1, h1, h1.next + else: + tail.next, tail, h2 = h2, h2, h2.next + + tail.next = h1 or h2 + return dummy.next + + def sortList(self, head): + if not head or not head.next: + return head + + pre, slow, fast = None, head, head + while fast and fast.next: + pre, slow, fast = slow, slow.next, fast.next.next + pre.next = None + + return self.merge(*map(self.sortList, (head, slow))) diff --git a/ArrayAndLink/LinkedList/Kilien/SwapNodesinPairs.py b/ArrayAndLink/LinkedList/Kilien/SwapNodesinPairs.py new file mode 100755 index 0000000000000000000000000000000000000000..55bb6522b523177f6c3f19c3e387b70b6ee09b52 --- /dev/null +++ b/ArrayAndLink/LinkedList/Kilien/SwapNodesinPairs.py @@ -0,0 +1,18 @@ +#Author:kilien +#Leetcode 24.Swap Nodes in Pairs +#思路:定义哨兵节点,互换相邻节点及后继节点,详见图解 +#time:O(n) space:O(n) +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, x): +# self.val = x +# self.next = None +class Solution: + def swapPairs(self, head: ListNode) -> ListNode: + pre, pre.next = self, head + while pre.next and pre.next.next: + a = pre.next + b = a.next + pre.next, b.next, a.next = b, a, b.next + pre = a + return self.next diff --git a/ArrayAndLink/LinkedList/Kilien/reverse-linked-list.py b/ArrayAndLink/LinkedList/Kilien/reverse-linked-list.py new file mode 100755 index 0000000000000000000000000000000000000000..d7161c5d69d9f9f6d6d4d81f7bc5da78447e4655 --- /dev/null +++ b/ArrayAndLink/LinkedList/Kilien/reverse-linked-list.py @@ -0,0 +1,17 @@ +#author:kilien +#Leetcode 206.Reverse Linked List +#思路:定义两个指针,指向前继节点和当前节点 +#多元赋值,两两互换 +#time:O(n) space:O(1) +# Definition for singly-linked list. +# class ListNode: +# def __init__(self, x): +# self.val = x +# self.next = None + +class Solution: + def reverseList(self, head: ListNode) -> ListNode: + cur, prev = head, None + while cur: + cur.next, prev, cur = prev, cur, cur.next + return prev \ No newline at end of file diff --git a/ArrayAndLink/Merlin/.keep b/ArrayAndLink/Merlin/.keep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/ArrayAndLink/Merlin/141_LinkedListCycle.png b/ArrayAndLink/Merlin/141_LinkedListCycle.png new file mode 100644 index 0000000000000000000000000000000000000000..f642ceea9dde90df94819e5c19d5796e025d8ea0 Binary files /dev/null and b/ArrayAndLink/Merlin/141_LinkedListCycle.png differ diff --git a/ArrayAndLink/Merlin/142_LinkedListCycleII.png b/ArrayAndLink/Merlin/142_LinkedListCycleII.png new file mode 100644 index 0000000000000000000000000000000000000000..4c41dfb6654a5df3d95928fc1e606b56b36d2837 Binary files /dev/null and b/ArrayAndLink/Merlin/142_LinkedListCycleII.png differ diff --git a/ArrayAndLink/Merlin/206_ReverseLinkedList.png b/ArrayAndLink/Merlin/206_ReverseLinkedList.png new file mode 100644 index 0000000000000000000000000000000000000000..dffd0f21c975ef8da96e3a64bc5ed5154f00ba37 Binary files /dev/null and b/ArrayAndLink/Merlin/206_ReverseLinkedList.png differ diff --git a/ArrayAndLink/Merlin/24_SwapNodesInPairs.png b/ArrayAndLink/Merlin/24_SwapNodesInPairs.png new file mode 100644 index 0000000000000000000000000000000000000000..742b1b80f8a1319dacac7b8fd13ee662cf7b035b Binary files /dev/null and b/ArrayAndLink/Merlin/24_SwapNodesInPairs.png differ diff --git a/ArrayAndLink/UpToSky_141.png b/ArrayAndLink/UpToSky_141.png new file mode 100644 index 0000000000000000000000000000000000000000..91597c6bebad6e281b2a5cdb1383c39c05be2f1a Binary files /dev/null and b/ArrayAndLink/UpToSky_141.png differ diff --git a/ArrayAndLink/UpToSky_206.png b/ArrayAndLink/UpToSky_206.png new file mode 100644 index 0000000000000000000000000000000000000000..db317a715bafa514457ddb75a4e75c02a5163d53 Binary files /dev/null and b/ArrayAndLink/UpToSky_206.png differ diff --git a/ArrayAndLink/UpToSky_24.png b/ArrayAndLink/UpToSky_24.png new file mode 100644 index 0000000000000000000000000000000000000000..659532220c9e476d77aeb74571d262414535c750 Binary files /dev/null and b/ArrayAndLink/UpToSky_24.png differ diff --git "a/ArrayAndLink/baixue_141_\347\216\257\345\275\242\351\223\276\350\241\250\357\274\210\345\277\253\346\205\242\346\214\207\351\222\210\346\263\225\357\274\211.png" "b/ArrayAndLink/baixue_141_\347\216\257\345\275\242\351\223\276\350\241\250\357\274\210\345\277\253\346\205\242\346\214\207\351\222\210\346\263\225\357\274\211.png" new file mode 100644 index 0000000000000000000000000000000000000000..d01a414816cc058824c45d6a10509b28d52cf6f7 Binary files /dev/null and "b/ArrayAndLink/baixue_141_\347\216\257\345\275\242\351\223\276\350\241\250\357\274\210\345\277\253\346\205\242\346\214\207\351\222\210\346\263\225\357\274\211.png" differ diff --git "a/ArrayAndLink/baixue_141_\347\216\257\345\275\242\351\223\276\350\241\250\357\274\210\347\274\223\345\255\230\350\256\260\345\275\225\346\263\225\357\274\211.png" "b/ArrayAndLink/baixue_141_\347\216\257\345\275\242\351\223\276\350\241\250\357\274\210\347\274\223\345\255\230\350\256\260\345\275\225\346\263\225\357\274\211.png" new file mode 100644 index 0000000000000000000000000000000000000000..bd11099d0035883fbe5c263c58b5287db659a05b Binary files /dev/null and "b/ArrayAndLink/baixue_141_\347\216\257\345\275\242\351\223\276\350\241\250\357\274\210\347\274\223\345\255\230\350\256\260\345\275\225\346\263\225\357\274\211.png" differ diff --git "a/ArrayAndLink/baixue_142_\347\216\257\345\275\242\351\223\276\350\241\250\345\256\232\345\205\245\345\217\243\357\274\210\345\277\253\346\205\242\346\214\207\351\222\210\346\263\225\357\274\211.png" "b/ArrayAndLink/baixue_142_\347\216\257\345\275\242\351\223\276\350\241\250\345\256\232\345\205\245\345\217\243\357\274\210\345\277\253\346\205\242\346\214\207\351\222\210\346\263\225\357\274\211.png" new file mode 100644 index 0000000000000000000000000000000000000000..1e99db7802c2baf949d6905c5d7791318897b1c9 Binary files /dev/null and "b/ArrayAndLink/baixue_142_\347\216\257\345\275\242\351\223\276\350\241\250\345\256\232\345\205\245\345\217\243\357\274\210\345\277\253\346\205\242\346\214\207\351\222\210\346\263\225\357\274\211.png" differ diff --git "a/ArrayAndLink/baixue_142_\347\216\257\345\275\242\351\223\276\350\241\250\345\256\232\345\205\245\345\217\243\357\274\210\347\274\223\345\255\230\350\256\260\345\275\225\346\263\225\357\274\211.png" "b/ArrayAndLink/baixue_142_\347\216\257\345\275\242\351\223\276\350\241\250\345\256\232\345\205\245\345\217\243\357\274\210\347\274\223\345\255\230\350\256\260\345\275\225\346\263\225\357\274\211.png" new file mode 100644 index 0000000000000000000000000000000000000000..41625dc5b557a169b5ea4a04532dd29bd87a86b1 Binary files /dev/null and "b/ArrayAndLink/baixue_142_\347\216\257\345\275\242\351\223\276\350\241\250\345\256\232\345\205\245\345\217\243\357\274\210\347\274\223\345\255\230\350\256\260\345\275\225\346\263\225\357\274\211.png" differ diff --git "a/ArrayAndLink/baixue_206_\345\217\215\350\275\254\351\223\276\350\241\250.png" "b/ArrayAndLink/baixue_206_\345\217\215\350\275\254\351\223\276\350\241\250.png" new file mode 100644 index 0000000000000000000000000000000000000000..262831264a3fa3f87d28812b533e6ec723b39995 Binary files /dev/null and "b/ArrayAndLink/baixue_206_\345\217\215\350\275\254\351\223\276\350\241\250.png" differ diff --git a/ArrayAndLink/yaya_Linked_List_Cycle.png b/ArrayAndLink/yaya_Linked_List_Cycle.png new file mode 100644 index 0000000000000000000000000000000000000000..aa1bc37ac916b83c0daf6381cf5b357d495bdc8a Binary files /dev/null and b/ArrayAndLink/yaya_Linked_List_Cycle.png differ diff --git "a/ArrayAndLink/\345\256\266_141.md" "b/ArrayAndLink/\345\256\266_141.md" new file mode 100644 index 0000000000000000000000000000000000000000..21271a2807438b90c3b6599180bb19662a4fea35 --- /dev/null +++ "b/ArrayAndLink/\345\256\266_141.md" @@ -0,0 +1,16 @@ +``` +/** + * 作者:家 + * 思路:快指针每次前进两格,慢指针前进一格,能够相遇即可证明有环。 + * 时间复杂度:O(n) + * 空间复杂度:O(1) + */ + func hasCycle(head *ListNode) bool { + fast,slow := head,head + for fast != nil && fast.Next != nil { + slow, fast = slow.Next,fast.Next.Next + if slow == fast {return true} + } + return false +} +``` \ No newline at end of file diff --git "a/ArrayAndLink/\345\256\266_142.md" "b/ArrayAndLink/\345\256\266_142.md" new file mode 100644 index 0000000000000000000000000000000000000000..007426dd292ee592aa34299e61267451b39e9fce --- /dev/null +++ "b/ArrayAndLink/\345\256\266_142.md" @@ -0,0 +1,30 @@ +具体思路解释:https://blog.csdn.net/weixin_43315529/article/details/89847215 +``` +/** + * 作者:家 + * 思路:快指针每次前进两格,慢指针前进一格,相遇之后将fast置为头结点和slow每次各自前进一格,再次相遇即为环的起始位置 + * 时间复杂度:O(n) + * 空间复杂度:O(1) + */ +func detectCycle(head *ListNode) *ListNode { + slow,fast:=head,head + for{ + if fast==nil||fast.Next==nil { + break; + } + slow, fast = slow.Next,fast.Next.Next + if slow==fast { + fast = head; + for{ + if(slow==fast){ + return slow + } + slow=slow.Next + fast=fast.Next + } + } + } + return nil + +} +``` \ No newline at end of file diff --git "a/ArrayAndLink/\345\256\266_206.md" "b/ArrayAndLink/\345\256\266_206.md" new file mode 100644 index 0000000000000000000000000000000000000000..d5ccbe9b7565a4a2befe38257b8c1514b7768c9f --- /dev/null +++ "b/ArrayAndLink/\345\256\266_206.md" @@ -0,0 +1,16 @@ +``` +/** + * 作者:家 + * 思路:新建一个空节点,在遍历的过程中不断赋值为当前节点,从而达到获取当前节点上一个节点的作用。 + * 时间复杂度:O(n) + * 空间复杂度:O(1) + */ +func reverseList(head *ListNode) *ListNode { + var prev *ListNode + for head != nil { + //不断地将当前节点的Next赋值为上一个节点 + head.Next,head,prev = prev,head.Next,head + } + return prev +} +``` \ No newline at end of file diff --git "a/ArrayAndLink/\345\256\266_24.md" "b/ArrayAndLink/\345\256\266_24.md" new file mode 100644 index 0000000000000000000000000000000000000000..0b57f8227a1f2a7f1d6134e17abecd9ced7758af --- /dev/null +++ "b/ArrayAndLink/\345\256\266_24.md" @@ -0,0 +1,18 @@ +``` +/** + * 作者:家 + * 思路:遍历的同时注意链表的指向即可。 + * 时间复杂度:O(n) + * 空间复杂度:O(1) + */ + func swapPairs(head *ListNode) *ListNode { + newHead := new(ListNode) + newHead.Next = head + rHead := newHead + for rHead.Next != nil && rHead.Next.Next != nil { + rHead.Next,rHead.Next.Next,rHead.Next.Next.Next,rHead = rHead.Next.Next,rHead.Next.Next.Next,rHead.Next,rHead.Next + } + return newHead.Next + +} +``` \ No newline at end of file