合并两个排序的链表
Posted 码上哈希
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合并两个排序的链表相关的知识,希望对你有一定的参考价值。
题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:题目相对简单,有两个思路,一个是遍历两个链表的公共长度,按值的大小把各个节点连接起来,最后把较长链表的剩余部分追加到最后。第二个思路,这个类似于自然合并排序,可以使用递归分治的思想来解决问题,还让你容易就能把这个问题分解成子问题。
实现代码
非递归:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null) return list2; if(list2 == null) return list1; ListNode head; if(list1.val<=list2.val) { head = list1; list1 = list1.next; } else { head = list2; list2 = list2.next; } ListNode pNode = head; while(list1 != null && list2 != null) { if(list1.val <= list2.val) { pNode.next = list1; list1 = list1.next; } else { pNode.next = list2; list2 = list2.next; } pNode = pNode.next; } while(list1 != null) { pNode.next = list1; pNode = pNode.next; list1 = list1.next; } while(list2 != null) { pNode.next = list2; pNode = pNode.next; list2 = list2.next; } return head; } }
递归:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode Merge(ListNode list1,ListNode list2) { if(list1 == null) return list2; if(list2 == null) return list1; ListNode head; if(list1.val < list2.val) { head = list1; head.next = Merge(list1.next, list2); } else { head = list2; head.next = Merge(list1, list2.next); } return head; } }
以上是关于合并两个排序的链表的主要内容,如果未能解决你的问题,请参考以下文章