算法优解(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
- 算法优解(10)-合并两个有序的单链表
- 两个有序单链表的合并&两个有序数组的合并
- 两个有序单链表的合并
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序的单链表
- 合并两个有序链表的算法
- 两个有序数组的合并算法
- 算法:两个有序链表的合并
- 算法:两个有序数组的合并
- 两个有序序列的合并算法
- 数据结构——算法之(033)(两个有序单链表合并为一个有序的单链表)
- 合并两个有序单链表
- 1452: 旅行(SPFA)
- (转)EL表达式(Expression Language)
- android下面通过ndk建立一个虚拟触摸屏设备可以被sendevent调用
- Android Drawable 进阶篇
- js string()常用方法总结
- 算法优解(10)-合并两个有序的单链表
- android listview 异步加载图片并防止错位
- 记android学习之路----Activity(4)----Activity之间的跳转与数据传递
- PIC单片机精通_A/D转换&异步串口通讯实例与详解
- web分布式方案
- codeforces 738D Sea Battle 思维+构造
- Java——>IO
- file结构中的private_data
- 自定义View(一):初认识自定义Veiw