题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路
一、非递归
①利用两个node(head、cur),head指向头节点,cur指向当前处理的节点。
②遍历比较list1和list2的元素,将小的元素添加入链表,如果一条链表遍历结束,将另一条剩余元素合并到新链表。
③最后返回头节点。
public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null){ //list1为空 return list2; } if(list2 == null){ //list2为空 return list1; } ListNode head = null; ListNode cur = null; while(list1 != null && list2 != null){ //当list1 与 list2 都不为空 if(list1.val < list2.val){ //list1的元素 小于 list2的元素 if(head == null){ //当添加第一个元素 cur = head = list1; //头节点指向第一个元素 }else{ cur.next = list1; //将元素添加入链表 cur = cur.next; //移动cur指针 } list1 = list1.next; //移动list1指针 }else{ if(head == null){ cur = head = list2; }else{ cur.next = list2; cur = cur.next; } list2 = list2.next; } } if(list1 == null){ //list1遍历结束 cur.next = list2; //将list2剩余元素添加入新链表 } if(list2 == null){ //list2遍历结束 cur.next = list1;//将list1剩余元素添加入新链表 } return head; //返回头节点 }
二、递归
逐个比较list1的元素与list2的元素大小,将小的元素添加到另一条链表,最后两条链表都是有序链表,返回任意一条即可。
public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null){ return list2; } if(list2 == null){ return list1; } while(list1 != null && list2 != null){ if(list1.val < list2.val){ //比较list1的val 与 list2的val //将list2的元素添加到list1中,直到list1.val 》 list2.val list1.next = Merge(list1.next,list2); return list1; }else{ //将list1的元素添加到list2中,直到list1.val 《 list2.val list2.next = Merge(list1,list2.next); return list2; } } return list1; //list1 == list2 }
来源:https://www.cnblogs.com/le-le/p/12411490.html