剑指offer系列-T17合并两个排序的链表

      本人对java语言更熟悉,所以剑指offer代码都是通过Java实现,且涉及的核心代码全部通过牛客网的测试用例检查,感谢牛客网为我检验程序提供了极大帮助!main函数是为了在自己运行程序时,运行结果更直观化。

/**
 * @author xhl
 *合并两个排序的链表
 *题目描述
 *输入两个单调递增的链表,输出两个链表合成后的链表,
 *当然我们需要合成后的链表满足单调不减规则。
 *思路:本题用循环实现,也可用递归实现。循环实现时
 *要注意先找到头结点再进入循环,递归时也是先找到头
 *节点,因为这样才能求next节点,另外注意,要有两个指针指向合并后链表
 *一个指针做操作,另一个记录头结点!
 */
public class offerT17 {

	/**
	 * @param args
	 */
	 public ListNode Merge(ListNode list1,ListNode list2) {
		 /*当其中一个链表为空*/
		 if(list1==null){
			 return list2;
		 }
		 if(list2==null){
			 return list1;
		 }
		 
		 ListNode list3 = null;//合并后的链表
		 if(list2.val<list1.val){
				list3=list2;
				list2=list2.next;
				}
			 else{
				 list3=list1;
				 list1=list1.next;
				 }
		 ListNode plist3 =list3;//找到头结点,并定义指针plist3指向头结点
		 

		 while(list1!=null&&list2!=null){
				 if(list2.val<list1.val){
					plist3.next=list2;
					list2=list2.next;
					}
				 else{
					 plist3.next=list1;
					 list1=list1.next;
					 }
				 plist3 =plist3.next;
				 }
		 if(list1!=null){
			 plist3.next=list1;
		 }
		 if(list2!=null){
			 plist3.next=list2;
		 }
	        return list3;
	    }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		offerT17 o = new offerT17();
		ListNode node1 = new ListNode(1);
		ListNode node2 = new ListNode(2);
		ListNode node3 = new ListNode(3);
		ListNode node4 = new ListNode(4);
		ListNode node5 = new ListNode(5);
		
		node1.next = node3;
		node2.next = node4;
		node3.next = node5;
		node4.next = null;
		node5.next = null;
		ListNode pnode = o.Merge(node1, node2);
		while(pnode!=null){
			System.out.println(pnode.val);
			pnode=pnode.next;
		}
		/*有趣,为说明ListNode plist3 =list3;后对plist3做操作,会影响list3的值,这涉及到Java值传递引用传递的特性*/
		int[] a={0};
		int[] b=a;
		b[0]=1;
		System.out.println("有趣的例子"+a[0]);
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值