题目:分别实现两个函数,一个可以删除单链表中倒数第k个节点,另一个可以删除双链表中倒数第k个节点
要求:如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)
"""单链表"""
class Node:
def __init__(self,value):
self.value = value
self.next = None
def removeLastKth(head,k):
if head == None or k<1:
return head
cur = head
while cur!=None:
k-=1
cur = cur.next
if k == 0:
head = head.next
elif k < 0:
cur = head
while k+1!=0:
k = k+1
cur = cur.next
cur.next = cur.next.next
return head
"""双链表"""
class DoubleNode:
def __init__(self,val):
self.val = val
self.next = None
self.pre = None
def removeLastKth(self,k):
if head == None or k < 1:
return head
cur = head
while cur!=None:
k -=1
cur = cur.next
if k == 0:
head = head.next
head.pre = None
elif k < 0:
cur = head
while k!=0:
k +=1
cur = cur.next
cur.next = cur.next.next
if cur.next!=None:
cur.next.pre = cur
return head