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;
    		}
    }
    

      

  • 相关阅读:
    Faster R-CNN
    06.看板实践——限制在制品
    05.看板方法——在制品
    04.看板实践——工作项
    03.看板实战——工作可视化
    02.看板实践——理解看板
    01.看板实践——学习看板(笔记)
    00.看板实践——前言(笔记)
    00.Scrum指南
    02.有效的项目管理——什么是项目管理
  • 原文地址:https://www.cnblogs.com/qingfei1994/p/4894711.html
Copyright © 2011-2022 走看看