题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则
思路:这就是一个二路归并的实现。
不过就是初始数据是存储在链表当中的。
部分代码:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.ArrayList;
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
if(list1==null&&list2==null){//两个链表都是空的
return null;
}
ArrayList<ListNode> list11 = new ArrayList<>();
ArrayList<ListNode> list22 = new ArrayList<>();
while(list1!=null){
list11.add(list1);
list1 = list1.next;
}
while(list2!=null){
list22.add(list2);
list2 = list2.next;
}
if(list11.size()==0){
ListNode node1 = new ListNode(list22.get(0).val);
ListNode node2 = node1;
for(int i = 1;i<list22.size();i++){
node1.next = new ListNode(list22.get(i).val);
node1 = node1.next;
}
return node2;
}
if(list22.size()==0){
ListNode node1 = new ListNode(list11.get(0).val);
ListNode node2 = node1;
for(int i = 1;i<list11.size();i++){
node1.next = new ListNode(list11.get(i).val);
node1 = node1.next;
}
return node2;
}
ListNode node = new ListNode(list11.get(0).val>list22.get(0).val?list22.get(0).val:list11.get(0).val);
ListNode result = node;
//说明:此处用两个变量的原因,有人直接只定义一个变量,并且给变量初始化为null,但是注意当初始化为null的对象,内存并没有给它分配地址。
// 一个变量node是中间变量,相当于是指针当前所指的,而result就是返回的了。在最开始的时候,赋值result = node,是让result指向node的最 // 开始的位置。
int index1 = 0;
int index2 = 0;
if(list11.get(0).val>list22.get(0).val){
index2 = 1;
}else{
index1 = 1;
}
for(int i = 0;i<(list11.size()+list22.size());i++){
if(index1<list11.size()&&index2<list22.size()&&list11.get(index1).val>=list22.get(index2).val){
node.next = new ListNode(list22.get(index2).val);
node = node.next;
index2++;
if(index2==list22.size()){
break;
}
}else if(index1<list11.size()&&index2<list22.size()){
node.next = new ListNode(list11.get(index1).val);
node = node.next;
index1++;
if(index1==list11.size()){
break;
}
}else{
break;
}
}
if(index1<list11.size()){
node.next = new ListNode(list11.get(index1).val);
node = node.next;
index1++;
}else{
node.next = new ListNode(list22.get(index2).val);
node = node.next;
index2++;
}
return result;
}
}
speak to myself:在编代码之前,我已经看出关键了,但是编出来的代码还是有一点繁琐。而且稍微一点失误,就不行。之后看了大家的代码,醍醐灌顶。还是要看看其他人的代码,当然是自己做完之后了。看看自己有什么优点,又有什么不足。取长补短,我相信,随着时间的过去,会有所提高的。