zoukankan      html  css  js  c++  java
  • php链表笔记:合并两个有序链表

    <?php
    /**
     * Created by PhpStorm.
     * User: huizhou
     * Date: 2018/12/2
     * Time: 15:29
     */
    
    /**
     * 合并两个有序链表
     * 思路:简单的合并排序。由于链表本来就是递增的,所以每次将两个链表中较小的部分拿过来就可以了。
     */
    
    class MergeNode{
        private $next;
        private $value;
    
        public function __construct($value = null)
        {
            $this->value = $value;
        }
    
        public function getValue(){
            return $this->value;
        }
    
        public function setValue($value){
            $this->value = $value;
        }
    
        public function getNext(){
            return $this->next;
        }
    
        public function setNext($next){
            $this->next = $next;
        }
    
    }
    
    function test(){
    
        // 创建两个有序的链表
    
        $linkList=new MergeNode();
    
        $linkList->setNext(null);
    
        $temp=$linkList;
    
        for($i=1;$i<=10;$i+=2){
    
            $node=new MergeNode();
    
            $node->setValue($i);
    
            $node->setNext(null);
    
            $temp->setNext($node);
    
            $temp=$node;
    
        }
    
        //第二个有序的链表
        $list2=new MergeNode();
    
        $temp=$list2;
    
        for($i=2;$i<=10;$i+=2){
    
            $node=new MergeNode();
    
            $node->setValue($i);
    
            $node->setNext(null);
    
            $temp->setNext($node);
    
            $temp=$node;
    
        }
    
        $result = Merge($linkList,$list2);
    
        while($result != null){
            if($result->getValue()){
                echo  $result->getValue() .",";
            }
            $result = $result->getNext();
        }
    
    }
    
    test();
    
    /**
     * 合并两个有序链表
     * @param MergeNode $pHead1
     * @param MergeNode $pHead2
     * @return MergeNode
     */
    function Merge(MergeNode $pHead1,MergeNode $pHead2){
    
        if($pHead1 == null){
            return $pHead2;
        }
    
        if($pHead2 == null){
            return $pHead1;
        }
    
        if($pHead1->getValue() < $pHead2->getValue()){
            $resultHead = $pHead1;
            $pHead1 = $pHead1->getNext();
        }else{
            $resultHead = $pHead2;
            $pHead2 = $pHead2->getNext();
        }
    
        $pre = $resultHead;
        while ($pHead1 && $pHead2){
    
            if($pHead1->getValue() <= $pHead2->getValue()){
                $pre->setNext($pHead1);
                $pHead1 = $pHead1->getNext();
                $pre = $pre->getNext();
            }else{
                $pre->setNext($pHead2);
                $pHead2 = $pHead2->getNext();
                $pre = $pre->getNext();
            }
    
        }
    
        if($pHead1 != null){
            $pre->setNext($pHead1);
        }
    
        if($pHead2 !=null){
            $pre->setNext($pHead2);
        }
    
        return $resultHead;
    
    }
  • 相关阅读:
    BZOJ2330 SCOI2011糖果
    BZOJ 3812主旋律
    模板更新 扩展卢卡斯
    BZOJ4556 HEOI2016字符串
    CodeForces700E Cool Slogans
    Atcoder Contest069F:Flag
    计算几何模板(更新中......)
    BZOJ4003 JLOI2015城池攻占
    BZOJ3772精神污染
    HDU5919 SequenceⅡ
  • 原文地址:https://www.cnblogs.com/mrszhou/p/10056204.html
Copyright © 2011-2022 走看看