Spread the love
解题思路,双指针,快慢指针,快慢指针只差一个值
func middleNode(head *ListNode) *ListNode {
slow := head;
fast := head;
for fast != nil && fast.Next != nil {
slow = slow.Next;
fast = fast.Next.Next;
}
return slow;
}
解题思路:双指针,通过(长度 – 要删除的位置)的前n个元素的要删除的这个元素的前一个节点,根据前一个节点的后一个的后一个,为要删除的节点的后面元素得剩余数组
func removeNthFromEnd(head *ListNode, n int) *ListNode {
lenN := getNodesLen(head)
// fmt.Println(lenN)
dummy := &ListNode{0, head}
cur := dummy
for i:=0; i < lenN - n; i+=1 {
cur = cur.Next
}
// if cur.Next != nil {
cur.Next = cur.Next.Next
// } else {
// head = nil
// }
return dummy.Next
}
func getNodesLen(head *ListNode) int {
n:=0
for ; head !=nil; head = head.Next {
n+=1
}
return n
}