PHP面接問題ベスト1——チェーンテーブルの最後からK番目のノード
1133 ワード
単一のチェーンテーブルを入力し、チェーンテーブルの最後のK番目のノードを出力します.最後の1番目のノードはチェーンテーブルの最後のノードです.チェーンテーブルのノードは次のように定義されます.
構想1:このチェーンテーブルにn個のノードがあると仮定すると,最後からk番目のノードは,最初からn−k−1番目のノードである.従って、まずチェーンテーブルを1回遍歴し、チェーンテーブルの長さnを取得した後、チェーンテーブルをn−k−1番目のノードに最初から遍歴し、出力することができる.
構想2:スタックの後入先出の原則を利用して、補助スタックを創立して、チェーンテーブルを遍歴して、そしてノードを順次スタックに入れて、それからスタックのk番目のノードを出ればいいです.
考え方3:2つのポインタP 1を設定し、P 2はチェーンテーブルのヘッダノードを指し、チェーンテーブルを遍歴し、ポインタP 1はまずk-1個のノードを前方に移動し、その後P 1,P 2は同時に前方に移動し、P 1がチェーンテーブルの終端ノードに達したとき、P 2が指すのは最後からk番目のノードである.
構想三の実現コード:
class ListNode{
var $val;
var $next = NULL;
function __construct($x){
$this->val = $x;
}
}
構想1:このチェーンテーブルにn個のノードがあると仮定すると,最後からk番目のノードは,最初からn−k−1番目のノードである.従って、まずチェーンテーブルを1回遍歴し、チェーンテーブルの長さnを取得した後、チェーンテーブルをn−k−1番目のノードに最初から遍歴し、出力することができる.
構想2:スタックの後入先出の原則を利用して、補助スタックを創立して、チェーンテーブルを遍歴して、そしてノードを順次スタックに入れて、それからスタックのk番目のノードを出ればいいです.
考え方3:2つのポインタP 1を設定し、P 2はチェーンテーブルのヘッダノードを指し、チェーンテーブルを遍歴し、ポインタP 1はまずk-1個のノードを前方に移動し、その後P 1,P 2は同時に前方に移動し、P 1がチェーンテーブルの終端ノードに達したとき、P 2が指すのは最後からk番目のノードである.
構想三の実現コード:
function FindKthToTail($head, $k)
{
if($head == NULL || $k <= 0)
return NULL;
$retNode = NULL;
$pNode = $head;
$i = 1;
while($pNode)
{
if($i == $k) {
// pNode K-1 , retNode
$retNode = $head;
}
else if($i > $k) {
$retNode = $retNode->next;
}
$pNode = $pNode->next;
$i++;
}
return $retNode;
}