JZ25 合并两个排序的链表
JZ25 合并两个排序的链表
解法一 定义一个额外的链表和一个指针,移动指针,将数据插入到新的链表中
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
//一个已经为空了,直接返回另一个
if(list1 == null)
return list2;
if(list2 == null)
return list1;
//加一个表头
ListNode head = new ListNode(0);
ListNode cur = head;
//两个链表都要不为空
while(list1 != null && list2 != null){
//取较小值的节点
if(list1.val <= list2.val){
cur.next = list1;
//只移动取值的指针
list1 = list1.next;
}else{
cur.next = list2;
//只移动取值的指针
list2 = list2.next;
}
//指针后移
cur = cur.next;
}
//哪个链表还有剩,直接连在后面
if(list1 != null)
cur.next = list1;
else
cur.next = list2;
//返回值去掉表头
return head.next;
}
}
解法二 借助arraylist数组,将两个链表的值存入,然后排顺,在放入其中一个链表中返回
public static ListNode Merge(ListNode list1,ListNode list2) {
if(list1 == null && list2 == null)
return null;
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<ListNode> result = new ArrayList<ListNode>();
while (list1 != null) {
list.add(list1.val);
list1 = list1.next;
}
while (list2 != null) {
list.add(list2.val);
list2 = list2.next;
}
Collections.sort(list);
for(int i = 0;i<list.size();i++){
ListNode temp = new ListNode(list.get(i));
result.add(temp);
}
for(int i = 0;i<result.size()-1;i++){
result.get(i).next = result.get(i+1);
}
return result.get(0);
}
下一篇:
用栈来判断字符串是否是回文字符串
