链表——删除倒数第N的数的节点

解决方式:

我们使用的是快慢指针的方式

我们假设现在有5个节点,要查找倒数第2个节点

 

 

 先用快指针从头节点走2个节点

 

之后我们使用慢指针指向头节点

 

 然后以快指针为判断条件走到最后的节点,那最后慢指针的next节点就是要删除的节点

 

代码如下

    def delete_last_n_node(self, n):
        """删除链表中倒数第N个节点.
        主体思路:
            设置快、慢两个指针,快指针先行,慢指针不动;当快指针跨了N步以后,快、慢指针同时往链表尾部移动,
            当快指针到达链表尾部的时候,慢指针所指向的就是链表的倒数第N个节点
        参数:
            n:需要删除的倒数第N个序数
        """
        fast = self.__head
        slow = self.__head
        step = 0

        while step <= n:
            fast = fast.next_node
            step += 1

        while fast.next_node is not None:
            tmp = slow
            fast = fast.next_node
            slow = slow.next_node

        tmp.next_node = slow.next_node

  

 

posted @ 2021-04-15 22:24  SH金刚狼  阅读(54)  评论(0编辑  收藏  举报