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