算法优解(10)-合并两个有序的单链表

来源:互联网 发布:莎莎源码的解压密码 编辑:程序博客网 时间:2024/05/29 13:11

来自左神书中的一道题,在左神核心代码的基础上,添加了链表的构建和打印操作,将这道题完善成了一个小Demo,和各位共勉。

题目:

合并两个有序的单链表。


思路:

逐一比较两个链表的节点将其合并到其中一个链表。


核心算法

public static Node merge(Node head1,Node head2){if(head1 == null || head2 == null){return (head1 != null)? head1 : head2; }Node head = ((head1.value < head2.value) ? head1 : head2);Node cur1 = head1;Node cur2 = head2;Node pre = null;Node next = null;while(cur1 != null && cur2 != null){if(cur1.value < cur2.value){pre = cur1;cur1 = cur1.next;}else{pre.next = cur2;next = cur2.next;cur2.next = cur1;pre = cur2;cur2 = next;}}pre.next = ((cur1 == null) ? cur2 : cur1);return head;}

测试代码:

//构建链表1-3-```9Node head1 = new Node(1);Node temp1 = head1;for(int i = 3;i < 10;i+=2){temp1.next = new Node(i);temp1 = temp1.next;}printList(head1);//构建链表2-4-```10Node head2 = new Node(2);Node temp2 = head2;for(int i = 4;i <= 10;i+=2){temp2.next = new Node(i);temp2 = temp2.next;}printList(head2);Node head = merge(head1, head2);printList(head);

输出结果:

1->3->5->7->9 
2->4->6->8->10 
1->2->3->4->5->6->7->8->9->10 


原创不易,转载请注明出处哈。

权兴权意

http://blog.csdn.net/hxqneuq2012/article/details/53262774


完整源代码:

public class MergeListTest {/** * 权兴权意-2016.11.21 * 合并两个有序的单链表 */public static void main(String[] args) {//构建链表1-3-```9Node head1 = new Node(1);Node temp1 = head1;for(int i = 3;i < 10;i+=2){temp1.next = new Node(i);temp1 = temp1.next;}printList(head1);//构建链表2-4-```10Node head2 = new Node(2);Node temp2 = head2;for(int i = 4;i <= 10;i+=2){temp2.next = new Node(i);temp2 = temp2.next;}printList(head2);Node head = merge(head1, head2);printList(head);}//打印链表public static void printList(Node head){Node temp = head;while(temp != null){if(temp.next == null){System.out.print(temp.value + " ");break;}System.out.print(temp.value + "->");temp = temp.next;}System.out.println();}public static Node merge(Node head1,Node head2){if(head1 == null || head2 == null){return (head1 != null)? head1 : head2; }Node head = ((head1.value < head2.value) ? head1 : head2);Node cur1 = head1;Node cur2 = head2;Node pre = null;Node next = null;while(cur1 != null && cur2 != null){if(cur1.value < cur2.value){pre = cur1;cur1 = cur1.next;}else{pre.next = cur2;next = cur2.next;cur2.next = cur1;pre = cur2;cur2 = next;}}pre.next = ((cur1 == null) ? cur2 : cur1);return head;}}


0 0
原创粉丝点击