删除重复元素
题目://给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数
思路:
快指针遍历数组
慢指针记录保留的
int removedup(vector<int>& nums){
int len = nums.size();
int fast =1;//快指针遍历数组
int slow =1; //慢指针记录保留的
if(len ==0){//参数校验
return 0;
}
while(fast < len){
if(nums[fast] != nums[fast-1]){
nums[slow]=nums[fast];
slow++;
}
fast++;
}
return slow;
}
反转链表
1、先用c记录b一会的位置,
2、然后b指向a节点
3、然后ab后往后移动一个,
循环此过程
/翻转链表(迭代版本)
struct ListNode{
int val;
ListNode *next;
ListNode(int x): val(x),next(NULL){}
};
ListNode* ReverseList(ListNode* head){
if(!head || !head->next) return head; //只有一个结点或者节点为空
auto a = head;//自动匹配类型
auto b = head->next;
while(b){
auto c = b->next;//记录一下b一会的位置
b->next = a;
a = b;b = c;
}
head->next = NULL;
return a;
}
///反转链表和上面一样效果
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev = nullptr;
while (head) {
ListNode* next = head->next;
head->next = prev;
prev = head;
head = next;
}
return prev;
}
};