PHP如何實作合併兩個有序鍊錶為一個有序鍊錶(程式碼)

不言
發布: 2023-04-04 07:04:01
原創
2163 人瀏覽過

本篇文章帶給大家的內容是關於PHP如何實現合併兩個有序鍊錶為一個有序鍊錶(代碼) ,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

合併兩個有序的鍊錶為一個有序的鍊錶:
類似歸併排序中合併兩個數組的部分
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);
登入後複製

相關推薦:

PHP實作合併兩個排序鍊錶碼分享

PHP實作合併兩個排序鍊錶詳解

#

以上是PHP如何實作合併兩個有序鍊錶為一個有序鍊錶(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板