题目描述:
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
在链表内部操作很麻烦,干脆就把两个链表的值都取出来了放进一个列表list1里面,用sort函数将list1排序,然后再根据list里面的元素按顺序创建新的节点并放进list2里面。最后依次将list2里面的节点的下一个节点属性指向list2的下一个元素。
代码(Java):
public class doingmyself {
public static void main(String[] args) {
ListNode l1 = new ListNode(1);
l1.next = new ListNode(2);
l1.next.next = new ListNode(4);
ListNode l2 = new ListNode(1) ;
l2.next = new ListNode(3);
l2.next.next = new ListNode(4);
}
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
List<Integer> list = new ArrayList<Integer>();
ListNode p1 = l1;
ListNode p2 = l2;
while(p1!=null) { //将两个链表里面的值都取出来放进list里面
list.add(p1.val);
p1 = p1.next;
}
while(p2!=null) {
list.add(p2.val);
p2 = p2.next;
}
Collections.sort(list); //对list里面的元素进行排序
List<ListNode> list1 = new ArrayList<ListNode>(); //创建一个新的列表,里面是放即将创建出来的新的节点
for(int i=0;i<list.size();i++) {
ListNode term = new ListNode(list.get(i)); //按照list里面的元素,依次创建新的节点
list1.add(term); //然后将节点放到列表list1里面
}
for(int i=0;i<list1.size()-1;i++) { //将节点连接起来,list1里面第i个元素指向第i+1个元素
list1.get(i).next = list1.get(i+1);
}
ListNode l = list1.get(0);
return l;
}
}