1.常見方法分為迭代和遞歸,迭代是從頭到尾,遞歸是從尾到頭
2.設置兩個指針,old和new,每一項添加在new的后面,新鏈表頭指針指向新的鏈表頭
3.old->next不能直接指向new,而是應該設置一個臨時指針tmp,指向old->next指向的地址空間,保存原鏈表數據,然后old->next指向new,new往前移動到old處new=old,最后old=tmp取回數據
while(old!=null){
tmp=old->next
old->next=new
new=old
old=tmp
}
<?php class Node{ public $data; public $next; } //頭插法創建一個鏈表 $linkList=new Node(); $linkList->next=null;//頭結點 for($i=1;$i<=10;$i++){ $node=new Node(); $node->data="aaa{$i}";//創建新結點$node $node->next=$linkList->next;//$node->next指向頭結點->next $linkList->next=$node;//頭結點->next指向$node } var_dump($linkList); function ReverseList($pHead){ $old=$pHead->next;//跳過頭結點 $new=null; $tmp=null; //反轉過程 while($old!=null){ $tmp=$old->next; $old->next=$new; $new=$old; $old=$tmp; } //給新鏈表加個頭結點 $newHead=new Node(); $newHead->next=$new; var_dump($newHead); } ReverseList($linkList);
object(Node)#1 (2) { ["data"]=> NULL ["next"]=> object(Node)#11 (2) { ["data"]=> string(5) "aaa10" ["next"]=> object(Node)#10 (2) { ["data"]=> string(4) "aaa9" ["next"]=> object(Node)#9 (2) { ["data"]=> string(4) "aaa8" ["next"]=> object(Node)#8 (2) { ["data"]=> string(4) "aaa7" ["next"]=> object(Node)#7 (2) { ["data"]=> string(4) "aaa6" ["next"]=> object(Node)#6 (2) { ["data"]=> string(4) "aaa5" ["next"]=> object(Node)#5 (2) { ["data"]=> string(4) "aaa4" ["next"]=> object(Node)#4 (2) { ["data"]=> string(4) "aaa3" ["next"]=> object(Node)#3 (2) { ["data"]=> string(4) "aaa2" ["next"]=> object(Node)#2 (2) { ["data"]=> string(4) "aaa1" ["next"]=> NULL } } } } } } } } } } } object(Node)#12 (2) { ["data"]=> NULL ["next"]=> object(Node)#2 (2) { ["data"]=> string(4) "aaa1" ["next"]=> object(Node)#3 (2) { ["data"]=> string(4) "aaa2" ["next"]=> object(Node)#4 (2) { ["data"]=> string(4) "aaa3" ["next"]=> object(Node)#5 (2) { ["data"]=> string(4) "aaa4" ["next"]=> object(Node)#6 (2) { ["data"]=> string(4) "aaa5" ["next"]=> object(Node)#7 (2) { ["data"]=> string(4) "aaa6" ["next"]=> object(Node)#8 (2) { ["data"]=> string(4) "aaa7" ["next"]=> object(Node)#9 (2) { ["data"]=> string(4) "aaa8" ["next"]=> object(Node)#10 (2) { ["data"]=> string(4) "aaa9" ["next"]=> object(Node)#11 (2) { ["data"]=> string(5) "aaa10" ["next"]=> NULL } } } } } } } } } } }