剑指offer:(17)代码的鲁棒性:合并两个排序的链表

来源:互联网 发布:洛阳市青峰网络 编辑:程序博客网 时间:2024/05/16 13:59

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

测试用例:

    1、功能测试

           输入的两个链表有多个节点,节点的值互不相同

                                                          存在值相等的多个节点

    2、特殊输入测试

            两个链表的一个或者两个都为null

          

思路:递归解决

package cn.com.jianzhioffer;public class Solution17 {public static class ListNode {int val;ListNode next = null;public ListNode(int val) {this.val = val;}}public static ListNode mergeList(ListNode list1,ListNode list2){ //head为当前节点,如果当前节点为空的话,那就什么也不做,直接返回null;if(list1 == null) return list2;if(list2 == null) return list1;ListNode mergeHead = null;if(list1.val<list2.val){mergeHead = list1;mergeHead.next = mergeList(list1.next, list2);}else{mergeHead = list2;mergeHead.next = mergeList(list1, list2.next);}         return mergeHead;}}


非递归版本:

   定义两个指针,一个头指针,一个指向当前位置的指针(不停的变化,保证指向)

package co.com.jianzhioffer;public class Solution17 {public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}}/* * 非递归实现 */public ListNode Merge(ListNode list1, ListNode list2) {if (list1 == null)return list2;if (list2 == null)return list1;ListNode mergeHead = null;//存合并后链表的头指针ListNode current = null;//存储当前位置指针,在不断的变化while (list1 != null && list2 != null) {if (list1.val < list2.val) {if (mergeHead == null) {mergeHead = current = list1;} else {current.next = list1;current = current.next;}list1 = list1.next;} else {if (mergeHead == null) {mergeHead = current = list2;} else {current.next = list2;current = current.next;}list2 = list2.next;}}if(list1 == null){current.next = list2;}else{current.next = list1;}return mergeHead;}}


0 0
原创粉丝点击