Leetcode第21题合并两个有序链表
解题思路
- 首先需要创建一个ListNode节点类,实现存值和指向下一个节点的功能;
- 创建一个中间变量节点temp,为了能对其进行调用,必须设置头节点head,ListNode temp = head;头节点不存放具体数值,仅仅起指示位置的作用;
- 注意:因为l1与l2遍历一次之后就不需要再用,所以无需给二者设置头节点。
- 设计一个while循环,如果l1与l2有一者不为空就执行循环;
- 因为当节点为空的时候就不能用ListNode.val,会报错,所以在while循环里要用if判断是否有链表已经指向空。
- 返回head.next;
Java实现
public class Solution21 {
public static ListNode mergeTwoLists(ListNode l1,ListNode l2) {
ListNode head = new ListNode(0);
ListNode temp = head;
while(l1!=null || l2!=null) {
if(l1!=null && l2!=null) {
int x=l1.val,y=l2.val;
if(x>y) {
temp.next= new ListNode(y);
l2=l2.next;
}else {
temp.next= new ListNode(x);
l1=l1.next;
}
}else if(l1==null && l2!=null) {
int y=l2.val;
temp.next=new ListNode(y);
l2=l2.next;
}else {
int x=l1.val;
temp.next=new ListNode(x);
l1=l1.next;
}
temp =temp.next;
}
return head.next;
}
public static void showList(ListNode list) {
while(list!=null) {
System.out.print(list.val+" ");
list=list.next;
}
}
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);
mergeTwoLists(l1,l2);
showList(mergeTwoLists(l1,l2));
}
}