劍指 Offer 22 鍊錶中倒數第k個節點

2021-10-24 22:03:09 字數 1310 閱讀 6760

該題目和以下兩個題的解題思路相似:

劍指 offer——18:刪除鍊錶的節點

leetcode19:刪除鍊錶的倒數第n個節點

目錄

一、題目

二、示例

三、思想

四、**

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鍊錶的倒數第3個節點是值為4的節點。

示例:

給定乙個鍊錶:1->2->3->4->5, 和 k= 2.

返回鍊錶 4->5.

雙指標思想,p,q兩指標。

p指標是快指標,q指標是慢指標。

使兩指標的距離為n,那麼,當快指標p遍歷到鍊錶結尾時,慢指標q的下乙個節點為倒數第n個節點,刪除該節點即可。

# definition for singly-linked list.

class listnode:

def __init__(self, x):

self.val = x

self.next = none

class solution:

def getkthfromend(self, head: listnode, k: int):

p = head

q = head

for i in range(k):

if p.next:

p = p.next

else:

return head

while p.next:

p = p.next

q = q.next

return q

if __name__ == '__main__':

head = listnode(1)

head.next = listnode(2)

head.next.next = listnode(3)

head.next.next.next = listnode(4)

head.next.next.next.next = listnode(5)

n = 2

s = solution()

new_head = s.getkthfromend(head, n)

print(new_head)

劍指offer 22 鍊錶中倒數第K個結點

這道題的題目可以描述為 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。typedef int datatype typedef struct listnode listnode 初始化 void listinit listnode ppfirst 這道題的普通解題思路分為三步 1.定義兩個指標forwa...

劍指offer 22 鍊錶中倒數第k個節點

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。示例 給定乙個鍊錶 1 2 3 4 5,和 k 2.返回鍊錶 4 ...

劍指 Offer 22 鍊錶中倒數第k個節點

劍指 offer 22.鍊錶中倒數第k個節點 難度 簡單 輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。示例 給...