欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

每天一道leetecode:19、删除链表的第N个节点(medium)

程序员文章站 2022-07-14 07:58:06
...

趁着刚来到实验室,赶紧把今天的leetecode任务搞定,哈哈哈哈

链表哦,因为上一个题不知道为啥不对,看到这个竟然有点很爽的感觉,虽然这道题对了,但是我还是不知道为啥上一道题不对。。。哭哭

好吧,这道题很简单,不像是中等题目。

思路:设置两个指针,让这两个指针之间的距离为n,这样当后面的指针走到链表末尾的时候,前面的指针指的就是要删除元素的前驱节点,这样直接删除要删除的节点即可。

# Definition for singly-linked list.
class ListNode:
     def __init__(self, x):
         self.val = x
         self.next = None
'''
思路很清晰:
找两个指针,让这两个指针的距离为n+1,那么当一个指向最后的时候,另一个就指向要删除的节点的前驱节点
'''

def removeNthFromEnd(head, n):

    global  k, i, j
    k = head
    i = head
    num = 1
    j = None
    while head != None:
        if head.next != None:
            head = head.next
            num += 1
            if j != None:
                j = j.next
            if num - n == 1:
                j = k
        else:
            break
    if num == n:
        k = k.next
    else:
        j.next = j.next.next
    #print(k.val,j.next.val,head.val)
    # while k != None:
    #      print(k.val)
    #      k = k.next
    return k

p = ListNode(1)
p.next = ListNode(2)
p.next.next = ListNode(3)
p.next.next.next = ListNode(4)
p.next.next.next.next = ListNode(5)

removeNthFromEnd(p, 4)

每天一道leetecode:19、删除链表的第N个节点(medium)

相关标签: leetecode