您的位置:首页 > 其它

LeetCode_21---Merge Two Sorted Lists

2015-06-05 16:24 489 查看
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

Hide Tags
 Linked List

翻译:

Code:

package From21;

/**
* @author MohnSnow
* @time 2015年6月5日 下午4:26:33
*
*/
public class LeetCode21 {

/**
* @param argsmengdx
* -fnst
*/
static class ListNode {
int val;
ListNode next;

ListNode(int x) {
val = x;
}

@Override
public String toString() {
if (this.next != null) {
return val + "---" + this.next.toString();
} else {
return val + "";
}
}
}

//372msA
public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null && l2 == null) {
return null;
}
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
//下面一行解决上面九行
//if(l1==null || l2==null) return l1==null? l2 : l1;
ListNode head;
if (l1.val <= l2.val) {//寻找第一个点
head = l1;
l1 = l1.next;
} else {
head = l2;
l2 = l2.next;
}
ListNode temp = head;
while (l1 != null && l2 != null) {
if (l1.val <= l2.val) {
temp.next = l1;
l1 = l1.next;
temp = temp.next;
} else {
temp.next = l2;
l2 = l2.next;
temp = temp.next;
}
}
if (l2 != null) {
temp.next = l2;
}
if (l1 != null) {
temp.next = l1;
}
return head;
}

public static ListNode mergeTwoLists1(ListNode l1, ListNode l2) {
if (l1 == null || l2 == null)
return l1 == null ? l2 : l1;
ListNode dummy = new ListNode(0);//空间复杂度为O(1)
dummy.next = l1;
ListNode p1 = dummy;
ListNode p2 = l2;

while (p1.next != null && p2 != null) {
if (p2.val < p1.next.val) {
ListNode t = p2;
p2 = p2.next;
t.next = p1.next;
p1.next = t;
}
p1 = p1.next;
}
if (p1.next == null && p2 != null)
p1.next = p2;
return dummy.next;
}

public static ListNode mergeTwoLists2(ListNode l1, ListNode l2) {
if (l1 == null || l2 == null)
return l1 == null ? l2 : l1;
ListNode dummy = new ListNode(0);//空间复杂度为O(1)
dummy.next = l1;
ListNode p1 = dummy;
ListNode p2 = l2;

while (p1.next != null && p2 != null) {
if (p2.val < p1.next.val) {
ListNode t = p2;
p2 = p2.next;
t.next = p1.next;
p1.next = t;
}
p1 = p1.next;
}
if (p1.next == null && p2 != null)
p1.next = p2;
return dummy.next;
}

public static void main(String[] args) {
ListNode a = new ListNode(1);
ListNode b = new ListNode(2);
ListNode c = new ListNode(3);
ListNode d = new ListNode(4);
ListNode e = new ListNode(22);
a.next = b;
b.next = c;
c.next = d;
d.next = e;
e.next = null;
ListNode f = new ListNode(0);
ListNode g = new ListNode(2);
ListNode h = new ListNode(2);
ListNode i = new ListNode(9);
ListNode j = new ListNode(10);
f.next = g;
g.next = h;
h.next = i;
i.next = j;
j.next = null;
System.out.println(mergeTwoLists(a, f));
System.out.println(mergeTwoLists1(a, f));
System.out.println(mergeTwoLists2(a, f));

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  LeetCode