Leetcode——19. 删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

思路:

nodeList相关的,需要删除一个节点,就应该要找到前一个节点,但是头结点又没有前一个节点,又是dummyHead大法,只不过这里需要用到双指针。
在这里插入图片描述
因为都是倒着来的,所以,p和q之间隔着两个,距离是固定的
在这里插入图片描述
将p,q指针向前挪,直到p挪到虚拟的头结点位置,n的范围内,q指向下一个节点,q下一个节点不为空,就让p,q依次往后挪。

然后删掉p的下一个节点的值即可,注意最后返回的是dummyHead.next,因为可能删的就是head

class Solution:
    def removeNthFromEnd(self, head: 'ListNode', n: 'int') -> 'ListNode':
        dummyHead = ListNode(-1)
        dummyHead.next = head
        p = dummyHead
        q = dummyHead
        
        for i in range(n):
            q = q.next
        while q.next:
            q = q.next
            p = p.next
            
        p.next = p.next.next
        return dummyHead.next
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页