题解 | #合并两个排序的链表#
合并两个排序的链表
https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337
逻辑思路如下:
·先判断特殊情况,如果一开始两条链表存在为空,则返回另一条的值。
·判断两条链表的初始值哪条最小,以初始值为最小值的链表 为phead1
·通过一个变量tmp记录phead1当前节点的前一个节点,方便后续连接phead2
·while循环,判断phead2是否为空,表示是比对完。逻辑就是用phead1当前的节点和phead2当前的节点比对
假如phead1当前的节点值 小于 phead2当前的节点值,phead1 往后移一个节点
假如 phead2当前的节点值 小于 phead1当前的节点值 , 把当前phead2当前的节点放在当前phead1当前的节点的前一节点。因此就需要用到变量tmp.
加入phead2未空,但phead1已空,证明phead2剩下的节点都比 phead1最后一个节点大,则把phead2 连接在 phead1最后一个节点后面。完成两个链表的合并
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead1 ListNode类
* @param pHead2 ListNode类
* @return ListNode类
*/
public ListNode Merge (ListNode pHead1, ListNode pHead2) {
//·先判断特殊情况,如果一开始两条链表存在为空,则返回另一条的值。
if(pHead2 == null)
{
return pHead1;
}
if(pHead1 ==null)
{
return pHead2;
}
//判断两条链表的初始值哪条最小,以初始值为最小值的链表 为phead1
if(pHead2.val<pHead1.val)
{
ListNode tmp = pHead1;
pHead1 = pHead2;
pHead2 = tmp;
}
ListNode head = pHead1;
ListNode lastHeadOne = head;
while(pHead2!=null)
{
if(pHead1==null)
{
lastHeadOne.next = pHead2;
pHead2 = null;
break;
}
if(pHead2.val<pHead1.val)
{
lastHeadOne.next = pHead2;
ListNode tmp = pHead2;
pHead2 = pHead2.next;
tmp.next = pHead1;
lastHeadOne = tmp;
}
else{
lastHeadOne= pHead1;
pHead1= pHead1.next;
}
}
return head;
}
}