碧海长天

好看的皮囊千篇一律,有趣的灵魂万里挑一。

leetcode刷题心得:019 删除链表的倒数第N个节点

2020-3-18

题目地址: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/

解题思路:应用链表快慢指针的原理,进行解题。
即:假设同一链表上有A、B两个指针。 A先跑了N步,然后B往前跑。 那么当A到达链表结尾时,B所在的位置就是链表当倒数第N个节点。

代码实现如下:

func removeNthFromEnd(head *ListNode, n int) *ListNode {
    daday,isFirstNode := getDadayNode(head,n)
    
    if isFirstNode{
        return head.Next
    }
    daday.Next = daday.Next.Next
    return head
}

func getDadayNode(head *ListNode,n int)(daday *ListNode,isFirstNode bool) {
    daday = head
    //head == nil时,即表示先开始跑的指针跑到终点了,此时停止循环,因为后面的那个节点正好在倒数第N的位置
    for head != nil{
        if n <0{
            daday = daday.Next            
        }
        n--
        head = head.Next
    }
    isFirstNode = n == 0
    return 
    
}


标签: leetcode

发表评论: