每天一道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)