剑指offer每日一刷

来源:互联网 发布:比特币算法漏洞 编辑:程序博客网 时间:2024/06/10 08:34

题目名称:

合并两个排序的链表。

题目描述:

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

链表定义:

/* * public class ListNode {  * int val;  * ListNode next = null; *  * ListNode(int val){  * this.val = val;  * } *  } */

方法一:递归

// 方法一:递归,25ms,占用内存在19M左右public ListNode Merge(ListNode list1, ListNode list2) {//list1和list2分别是两个链表的头节点if (list1 == null) {return list2;}if (list2 == null) {return list1;}//第一次if判断时,通过return语句返回合并后用作新链表的头节点if (list1.val <= list2.val) {list1.next = Merge(list1.next, list2);//第一次if语句之后的Merge函数用作合并链表的各个节点return list1;} else {list2.next = Merge(list1, list2.next);return list2;}}

方法二:非递归

//非递归,32ms,占用内存15M左右public ListNode Merge1(ListNode list1,ListNode list2){if(list1 == null){return list2;}if(list2 == null){return list1;}ListNode head = null;//记录链表合并后的头结点ListNode node = null; //用作合并链表的节点,指向合并后链表的尾节点while(list1 != null && list2 != null){if(list1.val <= list2.val){if(head == null){head = node = list1;}else{node.next = list1;node = node.next;}list1 = list1.next;}else{if(head == null){head = node = list2;}else{node.next = list2;node = node.next;}list2 = list2.next;}}if(list1 == null){node.next=list2;}if(list2 == null){node.next = list1;}return head;}


原创粉丝点击