[LeetCode 21,26,27][简单]合并两个有序链表/删除排序数组中的重复项/移除元素
21.合并两个有序链表
题目链接
直接比过去,把原来的链表拼起来,当然也可以拿值new过去。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode *ans = new ListNode(0);
ListNode *head = ans;
while(l1!=NULL&&l2!=NULL){
if(l1->val<l2->val){ans->next = l1;l1 = l1->next;}
else {ans->next = l2;l2 = l2->next;}
ans = ans->next;
}
if(l1!=NULL)ans->next = l1;
if(l2!=NULL)ans->next = l2;
return head->next;
}
};
//把上面的ans->next = l1替换为ans->next = new ListNode(l1->val)也可以(l1,l2都要换)
好久都没有写过带指针的东西了
26.删除排序数组中的重复项
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int st=1;
for(int i=1;i<nums.size();i++)if(nums[st-1]!=nums[i])nums[st++]=nums[i];
return min(st,(int)nums.size());
}
};
27.移除元素
题目链接
跟上面那个差不多
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int st=0,siz=nums.size();
for(int i=0;i<siz;i++){
while(i<siz&&nums[i]==val)i++;
if(i==siz)break;
nums[st++]=nums[i];
}
return st;
}
};