19. Remove Nth Node From End of List 两个指针

方法一:

先得到listnode的长度,然后再L-n+1处断开,接上下一个node

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

class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        dummy_head=ListNode(0)
        dummy_head.next=head  #把head储存起来
        length=0
        tmp=head
        while tmp:
            length+=1
            tmp=tmp.next
        delete_n=length-n+1
        
        if delete_n<1:
            return dummy_head.next
                    
        count=1
        h=dummy_head
        while count<delete_n:
            h=h.next
            count+=1
        tmp1=h.next
        h.next=tmp1.next
        
        return dummy_head.next

方法二:

使用两个指针

#两个指针
class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
        dummy=ListNode(0)
        dummy.next=head
        first=dummy
        second=dummy
        count=1
        while count<n+1:
            first=first.next
            count+=1
        while first.next:
            first=first.next
            second=second.next
        #second的下一个node要被remove
        second.next=second.next.next
        return dummy.next

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值