合并两个排序的链表
题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
问题分析:
对于已经排序的两个链表来说,合成一个不减的链表,核心就是通过比较,把小的放在链表前面,
然后进行逐个元素的循环,当有一个链表循环结束之后,就把另一个剩余的直接挂上去
两种方式:
1,采用递归的方式(核心还是比较)
2,创建一个新链表,通过比较,依次挂载节点
代码展示:
/*function ListNode(x){
this.val = x;
this.next = null;
}*/
function Merge(pHead1, pHead2)
{
//1,采用递归的方式
if (pHead1 == null || pHead2 == null){
return pHead1 || pHead2;
}
var newList = null;
if (pHead1.val < pHead2.val){
newList = pHead1;
newList.next = Merge(pHead2,pHead1.next);
} else {
newList = pHead2;
newList.next = Merge(pHead1,pHead2.next);
}
return newList;
//2,创建新链表,进行比较赋值,把另一个剩下的直接链接到新链表的尾部
var p = new ListNode(0),q = p;
while(pHead1 != null&&pHead2 != null){
if(pHead1.val < pHead2.val){
p.next = pHead1;
p = pHead1;
pHead1 = pHead1.next;
}
else{
p.next = pHead2;
p = pHead2;
pHead2 = pHead2.next;
}
}
if(pHead1 != null)
p.next = pHead1;
if(pHead2 != null)
p.next = pHead2;
return q.next;
}
类似
剑指offer-js 反转链表
剑指offer-js 链表中倒数第k个结点
总结:
链表这块,操作都在于节点,毕竟一个链表就只有val,next两个属性,通过两个节点,三个节点,基本能完成
关于链表的问题,像环形链表,两个链表的交点等。