python实现LeetCode第19题:删除链表的倒数第N个节点

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

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

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

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def removeNthFromEnd(self, head, n):
        """
        :type head: ListNode
        :type n: int
        :rtype: ListNode
        """
        # 空链表的情况下
        if head is None:
            return head
        
        # 只有一个节点并且要删除的就是这个节点
        elif head.next is None:
            if n>=1:
                return None
                
		# 大于等于两个节点的情况
        else:
            slow = head
            fast = head
            pre = slow
            i = 0
            # 快、慢两个指针,先让快指针前移n个节点
            while i < n and fast is not None:
                fast = fast.next
                i += 1
			
            while fast is not None:
                pre = slow
                slow = slow.next
                fast = fast.next
                
            # 判断要删除的是否是头节点
            if slow is head:
                head = pre.next
            else:
                pre.next = slow.next
            return head

猜你喜欢

转载自blog.csdn.net/w_xiaowen/article/details/89394245