题目描述:
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
解题思路:
链表是什么鬼?想了半天最后终于回忆起来当年学集合的时候好像老师讲过。
但是从来没有真正实现过一个链表,也从来没有用过,包括LinkedList;
由于记忆太模糊,只能先去找网上关于链表的定义,介绍。
再结合代码框中注释的节点类ListNode去想怎么解这道题,全程用IDE实现,需要测试和debug的东西太多了。
最后实现思路如下(效率很低,仅供参考)
输入:有序链表1,有序链表2
定义一个ArrayList,将有序链表1,2中值放入,并排序。
循环排序好的ArrayList,生成新的有序链表。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode returnNode = null;
if(l1 == null && l2 == null){
return returnNode;
}
if(l1 == null){
return l2;
}
if(l2 == null){
return l1;
}
ListNode tempNode = null;
List<Integer> tempList = new ArrayList<Integer>();
tempList.add(l1.val);
while(l1.next != null){
tempNode = l1.next;
tempList.add(tempNode.val);
l1 = tempNode;
}
int aLength = tempList.size();
int temp = l2.val;
for(int i = 0; i < tempList.size(); i++){
if(temp < tempList.get(i)){
tempList.add(i, temp);
break;
}
}
if(aLength == tempList.size()){
tempList.add(temp);
}
while(l2.next != null){
tempNode = l2.next;
aLength = tempList.size();
temp = tempNode.val;
for(int i = 0; i < tempList.size(); i++){
if(temp < tempList.get(i)){
tempList.add(i, temp);
break;
}
}
if(aLength == tempList.size()){
tempList.add(temp);
}
l2 = tempNode;
}
aLength = tempList.size() - 1;
for(int i = aLength; i >= 0; i--){
returnNode = addListNode(returnNode, tempList.get(i));
}
return returnNode;
}
public ListNode addListNode(ListNode listNode, int d){
ListNode newNode = new ListNode(d);
newNode.next = listNode;
return newNode;
}
}