zoukankan      html  css  js  c++  java
  • 剑指offer-合并两个排序的链表

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

     其实思路跟归并排序差不多,注意边界值

        1.两个List都为空,则返回空
        2.其中一个List为空,则返回不为空的List

     循环解法:

    public static ListNode merge(ListNode list1,ListNode list2) {
    		if(list1==null||list2==null) {
    			if(list1==null) {
    				return list2;
    			} else if (list2==null) {
    				return list1;
    			} else {
    				return null;
    			}
    		}
    		ListNode leftCurrent=list1;
    		ListNode rightCurrent=list2;
    		ListNode prehead=new ListNode(0);
    		ListNode leftPrevious=null;
    		ListNode rightPrevious=null;
    		//先决定谁是头指针
    		if(leftCurrent.val>rightCurrent.val) {
    			prehead.next=rightCurrent;
    			rightPrevious=rightCurrent;
    			rightCurrent=rightCurrent.next;
    		} else {
    			prehead.next=leftCurrent;
    			leftPrevious=leftCurrent;
    			leftCurrent=leftCurrent.next;
    		}
    		//进行合并,当两者都没有到达最后一个点时
    		while(rightCurrent!=null&&leftCurrent!=null) {
    			if(leftCurrent.val>rightCurrent.val) {
    				leftPrevious.next=rightCurrent;
    				rightPrevious=rightCurrent;
    				rightCurrent=rightCurrent.next;
    			} else {
    				rightPrevious.next=leftCurrent;
    				leftPrevious=leftCurrent;
    				leftCurrent=leftCurrent.next;
    			}
    		}
    		//若右边链表不为空
    		if(rightCurrent!=null) {
    			leftPrevious.next=rightCurrent;
    		}
    		//若左边链表不为空
    		if(leftCurrent!=null) {
    			rightPrevious.next=leftCurrent;
    		}
    		return prehead.next;
    }
    

     递归解法:

    public static ListNode merge(ListNode list1,ListNode list2) {
    		if(list1==null||list2==null) {
    			if(list1==null) {
    				return list2;
    			} else if (list2==null) {
    				return list1;
    			} else {
    				return null;
    			}
    		}
    		if(list1.val>list2.val) {
    			list2.next=merge(list1,list2.next);
    			return list2;
    		}  else {
    			list1.next=merge(list1.next,list2);
    			return list1;
    		}
    }
    

      

  • 相关阅读:
    第三次作业成绩
    现代程序设计 作业6
    动态期末成绩
    课堂作业成绩公布(游戏服务器以及客户端设计)
    第二次作业(homework-02)成绩公布
    指定长度,页面显示换行
    java学习流程
    对象比对
    开发语言转型
    Asp.Net 自定义储存Session方式
  • 原文地址:https://www.cnblogs.com/qingfei1994/p/4894711.html
Copyright © 2011-2022 走看看