劍指offer面試題15

2021-06-22 07:13:11 字數 2109 閱讀 5872

面試題15:鍊錶中倒數第k個結點

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

預備知識:

鍊錶結點的定義如下:

struct listnode

;

思路:定義兩個指標,第乙個指標從鍊錶的頭指標開始遍歷向前走k-1,第二個指標儲存不動;從第k步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。因為兩個指標的距離儲存在k-1,因此當第乙個指標達到鍊錶的尾部時,第二個指標正好是倒數第k個結點。

演算法實現:

/*******鍊錶結點定義****/

struct listnode

;/***************鍊錶操作****************/

//建立鍊錶結點

listnode* createlistnode(int value);

//鏈結鍊錶結點

void connectlistnodes(listnode* pcurrent, listnode* pnext);

//列印鍊錶結點

void printlistnode(listnode* pnode);

//遍歷鍊錶的所有結點

void printlist(listnode* phead);

//銷毀鍊錶

void destroylist(listnode* phead);

//在鍊錶尾部新增結點

void addtotail(listnode** phead, int value);

//移除結點

void removenode(listnode** phead, int value);

#include "stdafx.h"

#include "list.h"

#include #include //建立鍊錶結點

listnode* createlistnode(int value)

//鏈結鍊錶結點

void connectlistnodes(listnode* pcurrent, listnode* pnext)

pcurrent->m_pnext = pnext;

}//列印鍊錶結點

void printlistnode(listnode* pnode)

else }

//遍歷鍊錶的所有結點

void printlist(listnode* phead)

printf("\nprintlist ends.\n");

}//銷毀鍊錶

void destroylist(listnode* phead)

}//在鍊錶尾部新增結點

void addtotail(listnode** phead, int value)

else }

//移除結點

void removenode(listnode** phead, int value)

else }

}

main.cpp

// 面試題15.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include "..\list.h"

listnode* findkthtotail(listnode* plisthead, unsigned int k)

} pbehind = plisthead; //第二個指標

while(pahead->m_pnext != null)

return pbehind;

}// ************測試********

void test1()

int _tmain(int argc, _tchar* argv)

注意事項:

1. 輸入的煉表頭指標可能為null

2. 輸入的k可能為0

3 輸入的鍊錶結點個數小於k

劍指offer面試題7

面試題7 用兩個棧實現佇列 using namespace std template class cqueue 預備知識 佇列 佇列也是一種常見的資料結構 特點是先進先出 fifo 在stl中有stack和queue兩個容器 template class stack 成員函式 empty size ...

劍指offer面試題11

面試題1 數值的整數的次方 題目 實現函式double power double base,int exponent 求base的 exponent次方。不得使用庫函式,同時不需要考慮大數問題。思路 首先應該明確指數的可能取值 正整數,0,負整數 另外還需要考慮底數是0的情形。對於負整指數,我們可以...

劍指offer面試題21

面試題21 包含min函式的棧 題目 定義棧的資料結構,請在該型別中實現乙個能夠得到棧的最小元素的min函式。在該棧中,呼叫min push及pop的時間複雜度都是o 1 預備知識 棧的定義 模板函式 思路 面對乙個複雜的問題,我們可以舉幾個具體的例子來尋找規律,對於本題目,我們可以通過舉例來分析它...