劍指Offer 015 鍊錶中倒數第k個結點

2021-07-11 03:47:20 字數 2103 閱讀 1261

牛客oj:鍊錶中倒數第k個結點

九度oj:

github**: 015-鍊錶中倒數第k個結點

csdn題解:劍指offer–015-鍊錶中倒數第k個結點

牛客oj

九度oj

csdn題解

github**

鍊錶中倒數第k個結點

1517-鍊錶中倒數第k個結點

劍指offer–015-鍊錶中倒數第k個結點

015-鍊錶中倒數第k個結點

您也可以選擇回到目錄-劍指offer–題集目錄索引

題目描述

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。

這道題我想大多數人都會有思路,因為我們已經見的很多了

最暴力的方式,兩趟遍歷,第一趟先求出list的長度length,然後進而length - k得到倒數第k個節點的位置

當然我們大多數都會知道另外乙個更加高效的方法,雙指標法

其實就是第乙個指標right先向前走k步,然後left和right一起走,此時兩個指標差別k步,那麼當right走到鍊錶尾部的時候,left指向的就是倒數第k個節點

期間要注意的問題有

/// 1 -> 2 -> 3 -> 4 -> 5

/// 比如要走倒數第3個節點

/// 那麼right先走到第3 - 1個節點&[2]

/// 那麼right指標向前走到其下乙個節點為null時, left節點既是倒數第k個節點

/// 此時兩個指標相差為k - 1

/// 1 -> 2 -> 3 -> 4 -> 5

/// 比如要走倒數第3個節點

/// 那麼right先走到第3個節點&[2]

/// 那麼right指標向前走到鍊錶尾部為null時, left節點既是倒數第k個節點

/// 此時兩個指標相差為k

class solution

unsigned

int i = 0;

listnode *right = plisthead;

// left指標先向前走k步

while(i < k && right != null)

if(right == null && i < k)

listnode *left = plisthead;

while(right != null)

return left;

}};

當然也可以第乙個指標right先向前走k-1步,然後left和right一起走,此時兩個指標差別k-1步,那麼當right走到鍊錶尾部的前乙個結點時候的,left指向的就是倒數第k個節點

/// 1 -> 2 -> 3 -> 4 -> 5

/// 比如要走倒數第3個節點

/// 那麼right先走到第3 - 1個節點&[2]

/// 那麼right指標向前走到其下乙個節點為null時, left節點既是倒數第k個節點

/// 此時兩個指標相差為k - 1

/// 因此right需要走到鍊錶尾部前乙個結點

/// 1 -> 2 -> 3 -> 4 -> 5

/// 比如要走倒數第3個節點

/// 那麼right先走到第3個節點&[2]

/// 那麼right指標向前走到鍊錶尾部為null時, left節點既是倒數第k個節點

/// 此時兩個指標相差為k

/// 因此right需要走到鍊錶尾部前

class solution

unsigned

int i = 0;

listnode *right = plisthead;

// left指標先向前走k - 1步

while(i < k - 1 && right != null)

if(right == null)

listnode *left = plisthead;

while(right->next != null)

return left;

}};

劍指offer 015(二進位制中1的個數)

劍指offer 目錄索引 問題描述 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中1的個數。例如 把9表示成二進位制是1001,有2位是1。因此如果輸入9,該函式輸出2 思路1 求二進位制1的個數,首先想到操作符 按位與 規則 0 1 1 1 1 1 採用 的規則,對應的二進位制位 1,並統計...

劍指offer 鍊錶中倒數第k個結點(鍊錶)

輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。分析 兩個指標pointresult和pointend一起指向頭結點,然後根據k,移動pointend,使pointresult和pointend的距離為k 1。然後同時移動pointresult和pointend,當pointend指向最後乙個結點時,po...

劍指offer 鍊錶

單向鍊錶的結構定義 typedef int datatype struct listnode 問題1 往鍊錶的末尾新增乙個結點 給定頭結點,往末尾插入乙個結點 void insertnode listnode head,datatype key listnode p head while p nex...