两个有序链表序列的合并,终于做到满分了!

零尘 发表于2017年10月17日
<p><code class="brush:cpp;toolbar:false" >List&nbsp;Merge(&nbsp;List&nbsp;L1,&nbsp;List&nbsp;L2&nbsp;) {&nbsp;&nbsp;&nbsp;List&nbsp;p1,p2,Lc,pc; &nbsp;&nbsp;&nbsp;&nbsp;Lc=(List)malloc(sizeof(struct&nbsp;Node)); &nbsp;&nbsp;&nbsp;&nbsp;pc=Lc; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;p1=L1-&gt;Next;&nbsp;&nbsp;//p1、p2表示当前比较的L1和L2的结点 &nbsp;&nbsp;&nbsp;&nbsp;p2=L2-&gt;Next; &nbsp;&nbsp;&nbsp;while(p1&amp;&amp;p2) &nbsp;&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;if(p1-&gt;Data&lt;=p2-&gt;Data) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc-&gt;Next=p1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc=p1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p1=p1-&gt;Next;&nbsp;&nbsp;//将比较结点向后移,此时没有断开头结点和第一个结点的联系。但是把各个结点按大小顺序联系了起来。 &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc-&gt;Next=p2; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pc=p2; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p2=p2-&gt;Next; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;pc-&gt;Next=p1?p1:p2;&nbsp;&nbsp;//将剩余结点连到Lc后面去 &nbsp;&nbsp;&nbsp;L1-&gt;Next=p1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//将L1和L2与后一个结点的联系断开,指向空结点 &nbsp;&nbsp;&nbsp;L2-&gt;Next=p2; &nbsp;&nbsp;&nbsp;p1?(L1-&gt;Next=p2):(L2-&gt;Next=p1); &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Lc; }</code></p>