leetcode_19. 删除链表的倒数第N个节点

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

示例:

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

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

给定的 n 保证是有效的。

进阶:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        p=ListNode(0,head)#链表加头
        t=0
        while(head):#链表长度
            t+=1
            head=head.next
        #print(t)
        head=p
        temp=0
        while(temp<t-n):
            temp+=1
            head=head.next
        head.next=head.next.next
        return p.next
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        #栈
        p=ListNode(0,head)#加头
        ls=[]
        #压栈
        head=p
        while(head):
            ls.append(head)
            head=head.next
        for i in range(n):#出栈
            ls.pop()
        t=ls[-1]#找到前一个位置
        t.next=t.next.next
        return p.next
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        #快慢指针
        p=ListNode(0,head)
        fast=head
        slow=p
        for i in range(n):
            fast=fast.next
        while(fast):
            fast=fast.next
            slow=slow.next
        slow.next=slow.next.next
        return p.next
posted @ 2020-12-17 09:54  hqzxwm  阅读(52)  评论(0编辑  收藏  举报