算法:鏈表反轉
阿新 • • 發佈:2018-04-22
數組 linklist AR 表頭 null 。。 foreach clas 過多
在面試百度實習生的 時候遇到了這個問題,不是太難,當時只給面試官敘述了一下思路,後來想起這個問題還是決定手擼一遍,要不然總數眼高手低,昨天連快排都擼不出來了。。。
題目簡介:沒什麽可以過多介紹的,就是實現一個鏈表的反轉
<?php
class Node
{
public $value;
public $next = null;
public function __construct($data) {
$this->value = $data;
}
}
/**
* 構建鏈表
* @param $vals array 鏈表值的數組
* @return Node
*/
function genLinkList($vals) {
$headVal = array_shift($vals);
$head = new Node($headVal);
$p = $head;
foreach ($vals as $val) {
$p->next = new Node($val);
$p = $p->next;
}
return $head;
}
/**
* 反轉鏈表
* @param $head Node 鏈表頭結點
* @return Node 反轉後的鏈表頭結點
*/
function revLinkList( $head) {
$h = $head;
if (!$h->next) {
return $head;
}
$n = $h->next;
while ($n) {
$nn = $n->next;
$n->next = $h;
$h = $n;
$n = $nn;
}
$head->next = null;
return $h;
}
$data = [1, 2, 3, 4, 5, 6, 7];
$linkList = genLinkList($data);
print_r($linkList );
$linkListRev = revLinkList($linkList);
print_r($linkListRev);
算法:鏈表反轉