🍋1.合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
题目链接:合并两个有序链表https://leetcode-cn.com/problems/merge-two-sorted-lists/
因为题目中给的两条链表本身就是有序的,首先我们需要先有一个虚拟的头结点来接收答案,然后我们可以用两个指针从两链表的头部开始判断,将值更小的一个结点接到虚拟头结点上来,然后让该指针向右移动,继续同样的操作。直到某一条链表为空,然后就另外一条链接直接接上答案链表即可。
class Solution { public ListNode mergeTwoLists(ListNode list1, ListNode list2) { //如果一条链表为空可以直接返回另外一条 if(list1==null||list2==null){ return list1==null? list2:list1; } //虚拟头结点 ListNode dummyHead=new ListNode(); //用来遍历两个链表 ListNode a=list1; ListNode b=list2; //用来遍历答案链表 ListNode c=dummyHead; while(a!=null&&b!=null){ //将更小的结点接上c,然后向右移动 if(a.val<b.val){ c.next=a; c=c.next; a=a.next; }else{ c.next=b; c=c.next; b=b.next; } } //因为不知道是a链表空了还是b链表,所以两条都判断 //b空了,把a全接上 while(a!=null){ c.next=a; c=c.next; a=a.next; } //a空了,把b全接上 while(b!=null){ c.next=b; c=c.next; b=b.next; } //虚拟头结点的next才应该是答案数组真正的头结点 return dummyHead.next; } }
对于链表的处理能力还是非常重要的,尤其是在面试中,更是备受考官青睐,所以大家一定要掌握对于链表的处理能力。