Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
Example:
Input: 1->2->4, 1->3->4 Output: 1->1->2->3->4->4
方法一
该方法新建节点连接到新链表上开销较大
该方法新建节点连接到新链表上开销较大
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode res = new ListNode(-1);
ListNode p=res;
while(l1!=null&&l2!=null)
{
if(l1.val<l2.val)
{
p.next=new ListNode(l1.val);
l1=l1.next;
}
else
{
p.next=new ListNode(l2.val);
l2=l2.next;
}
p=p.next;
}
while(l1!=null)
{
p.next=new ListNode(l1.val);
l1=l1.next;
p=p.next;
}
while(l2!=null)
{
p.next=new ListNode(l2.val);
l2=l2.next;
p=p.next;
}
return res.next;
}
方法2在方法一的基础上利用原有节点将原有节点接到新链表上
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null&&l2==null)
{
return null;
}
if(l1!=null&&l2==null)
{
return l1;
}
if(l1==null&&l2!=null)
{
return l2;
}
ListNode node = new ListNode(-1);
ListNode p=node;
while(l1!=null&&l2!=null)
{
if(l1.val<l2.val)
{
p.next=l1;
l1=l1.next;
}
else
{
p.next=l2;
l2=l2.next;
}
p=p.next;
}
if(l1!=null)
{
p.next=l1;
}
if(l2!=null)
{
p.next=l2;
}
return node.next;
}
方法3递归
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1==null)
{
return l2;
}
if(l2==null)
{
return l1;
}
ListNode head;
if(l1.val<l2.val)
{
head=l1;
head.next=mergeTwoLists(l1.next,l2);
}
else
{
head=l2;
head.next=mergeTwoLists(l1,l2.next);
}
return head;
}
26. Remove Duplicates from Sorted Array
Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.
Example 1:
Given nums = [1,1,2], Your function should return length =2
, with the first two elements ofnums
being1
and2
respectively. It doesn't matter what you leave beyond the returned length.
Example 2:
Given nums = [0,0,1,1,1,2,2,3,3,4], Your function should return length =5
, with the first five elements ofnums
being modified to0
,1
,2
,3
, and4
respectively. It doesn't matter what values are set beyond the returned length.
给一个有序数组[1,2,3,4,4,5]去重并返回去重后的长度
int i=0;
for(int n:nums)
{
if(n>nums[i])
{
nums[++i]=n;
}
}
return i+1;