diff --git a/leetcode/0019.Remove-Nth-Node-From-End-of-List/19. Remove Nth Node From End of List.go b/leetcode/0019.Remove-Nth-Node-From-End-of-List/19. Remove Nth Node From End of List.go index a74cffcd..7c2855bb 100644 --- a/leetcode/0019.Remove-Nth-Node-From-End-of-List/19. Remove Nth Node From End of List.go +++ b/leetcode/0019.Remove-Nth-Node-From-End-of-List/19. Remove Nth Node From End of List.go @@ -17,31 +17,18 @@ type ListNode = structures.ListNode // 解法一 func removeNthFromEnd(head *ListNode, n int) *ListNode { - if head == nil { - return nil - } - var fast, slow *ListNode - fast = head - slow = head - step := 0 - for i := 0; i < n; i++ { - // n maybe much larger than length of linklist - if fast.Next == nil && step < n-1 { - return head + dummyHead := &ListNode{Next: head} + preSlow, slow, fast := dummyHead, head, head + for fast != nil { + if n <= 0 { + preSlow = slow + slow = slow.Next } + n-- fast = fast.Next - step++ } - if fast == nil { - head = head.Next - return head - } - for fast.Next != nil { - fast = fast.Next - slow = slow.Next - } - slow.Next = slow.Next.Next - return head + preSlow.Next = slow.Next + return dummyHead.Next } // 解法二 diff --git a/website/content/ChapterFour/0001~0099/0019.Remove-Nth-Node-From-End-of-List.md b/website/content/ChapterFour/0001~0099/0019.Remove-Nth-Node-From-End-of-List.md index e752190a..e1f772b9 100644 --- a/website/content/ChapterFour/0001~0099/0019.Remove-Nth-Node-From-End-of-List.md +++ b/website/content/ChapterFour/0001~0099/0019.Remove-Nth-Node-From-End-of-List.md @@ -52,7 +52,6 @@ Output: [1] ## 代码 ```go - package leetcode import ( @@ -72,31 +71,18 @@ type ListNode = structures.ListNode // 解法一 func removeNthFromEnd(head *ListNode, n int) *ListNode { - if head == nil { - return nil - } - var fast, slow *ListNode - fast = head - slow = head - step := 0 - for i := 0; i < n; i++ { - // n maybe much larger than length of linklist - if fast.Next == nil && step < n-1 { - return head + dummyHead := &ListNode{Next: head} + preSlow, slow, fast := dummyHead, head, head + for fast != nil { + if n <= 0 { + preSlow = slow + slow = slow.Next } + n-- fast = fast.Next - step++ } - if fast == nil { - head = head.Next - return head - } - for fast.Next != nil { - fast = fast.Next - slow = slow.Next - } - slow.Next = slow.Next.Next - return head + preSlow.Next = slow.Next + return dummyHead.Next } // 解法二 @@ -136,9 +122,6 @@ func removeNthFromEnd1(head *ListNode, n int) *ListNode { } return head } - - - ```