携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情
题目描述
点击直达题目链接
26. 删除有序数组中的重复项
解题思路
我们用两个下标i,j进行标记。i进行遍历数组,j用于和i对应的数进行比较。不同时才移动。
具体玩法:
i,j从开始进行匹配查找,当i,j指向的数相等时,i移动,j不动。当i和j指向的数不相等时,j移动一位,然后把i对应的值覆盖给j对应的值,接着i再移动。直到i遍历完整个数组。
代码
int removeDuplicates(int* nums, int numsSize){
int i=0,j=0;
while(i<numsSize)
{
if(nums[i]==nums[j])
{
i++;
}
else
{
j++;
nums[j]=nums[i];
i++;
}
}
return j+1;
}
反转链表
解题思路
==指针反转法==
这里我们直接把节点的指针进行反转就行,反转的时候要注意保存好下一个节点的地址和上一个节点的地址。 n1表示当前节点的上一个节点的地址 n2表示当前节点 n3表示当期节点的下一个节点的地址
==节点插入法== 我们创建新的头节点的地址,原链表中的每个节点一个一个进行头插。
代码
==指针反转法==
struct ListNode* reverseList(struct ListNode* head){
if(head==NULL)
return head;
struct ListNode* n1,*n2,*n3;
n1=NULL;
n2=head;
n3=head->next;
while(n3)
{
n2->next=n1;
n1=n2;
n2=n3;
n3=n2->next;
}
n2->next=n1;
return n2;
}
==节点插入法==
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* newhead=NULL;
while(head)
{
struct ListNode* cur=head;
head=head->next;
cur->next=newhead;
newhead=cur;
}
return newhead;
}