合併兩個有序的鏈表為一個有序的鏈表: 類似歸併排序中合併兩個數組的部分 1.遍歷鏈表1和鏈表2,比較鏈表1和2中的元素大小 2.如果鏈表1結點大於鏈表2的結點,該結點放入第三方鏈表 3.鏈表1往下走一步,反之亦如此 4.當兩個鏈表中有一個結束了以後,另一個鏈表就可以全部放進第三方鏈表了 list3 ... ...
合併兩個有序的鏈表為一個有序的鏈表: 類似歸併排序中合併兩個數組的部分 1.遍歷鏈表1和鏈表2,比較鏈表1和2中的元素大小 2.如果鏈表1結點大於鏈表2的結點,該結點放入第三方鏈表 3.鏈表1往下走一步,反之亦如此 4.當兩個鏈表中有一個結束了以後,另一個鏈表就可以全部放進第三方鏈表了 list3 while list1!=null list2!=null if list1->data >= list2->data list3->next=list1 list3=list1 //當前指針後移 list1=list1->next //鏈表1走一步 else list3->next=list2 list3=list2 list2=list2->next if list1!=null list3->next=list1 if list2!=null list3->next=list2
$linkList=new Node(); $linkList->next=null; $temp=$linkList; for($i=1;$i<=10;$i+=2){ $node=new Node(); $node->data=$i; $node->next=null; $temp->next=$node; $temp=$node; } //第二個有序的鏈表 $list2=new Node(); $temp=$list2; for($i=2;$i<=10;$i+=2){ $node=new Node(); $node->data=$i; $node->next=null; $temp->next=$node; $temp=$node; } //合併兩個鏈表 $newlist=new Node(); $list1=$linkList->next;//跳過頭結點 $list2=$list2->next; $list3=$newlist;//一定要賦予給這個臨時結點,否則新結點前移的時候就會被覆蓋 while($list1!=null && $list2!=null){ if($list1->data<=$list2->data){ $list3->next=$list1;//新鏈表指向鏈表1結點 $list3=$list1;//新鏈表當前結點往前移動 $list1=$list1->next;//鏈表1往前移動 }else{ $list3->next=$list2; $list3=$list2; $list2=$list2->next; } } if($list1!=null){ $list3->next=$list1; } if($list2!=null){ $list3->next=$list2; } var_dump($newlist);