題干
定義一個函數(shù),輸入一個鏈表的圖節(jié)點,反轉(zhuǎn)該鏈表并輸出反轉(zhuǎn)后鏈表的頭節(jié)點。鏈表節(jié)點定義如下:
class ListNode {
int val;
ListNode next;
}
解題思路
為了防止節(jié)點反轉(zhuǎn)的過程中出現(xiàn)鏈表斷裂的情況出現(xiàn),需要使用一個指針記錄節(jié)點的下一個節(jié)點
為了完成當前節(jié)點的反轉(zhuǎn),還需要記錄節(jié)點的上一個節(jié)點
因此需要三個指針來完成一個節(jié)點的反轉(zhuǎn),對鏈表的所有節(jié)點進行這樣的操作就完成了鏈表的反轉(zhuǎn)
代碼實現(xiàn)
<?php
class ListNode
{
private $val;
private $next;
public function __set($name, $value)
{
$this->$name = $value;
}
public function __get($name)
{
return $this->$name;
}
}
$node1 = new ListNode();
$node1->val = 1;
$node2 = new ListNode();
$node2->val = 2;
$node1->next = $node2;
$node3 = new ListNode();
$node3->val = 3;
$node2->next = $node3;
$node4 = new ListNode();
$node4->val = 4;
$node3->next = $node4;
$node5 = new ListNode();
$node5->val = 5;
$node4->next = $node5;
function reverseList($head)
{
$prev = null;
$node = $head;
$reverseHead = null;
while (!empty($node)) {
$next = $node->next;
if (empty($next)) {
$reverseHead = $node;
}
$node->next = $prev;
$prev = $node;
$node = $next;
}
return $reverseHead;
}
var_dump(reverseList(null));
var_dump(reverseList($node1));
var_dump(reverseList($node5));