题解 | 删除有序链表中重复的元素-I
删除有序链表中重复的元素-I
https://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
#include <math.h>
struct ListNode* deleteDuplicates(struct ListNode* head ) {
// write code here
if(head==NULL||head->next==NULL) return head;
struct ListNode *fast=head->next,*slow=head;
while(fast!=NULL){
if(fast->val==slow->val){
fast=fast->next;//当相同时fast直接后移,当存在多个重复节点时可以一步到位
}
else {
slow->next=fast;//此时fast节点直接指向不重复的两个节点,代码可以更简单
fast=fast->next;
slow=slow->next;
}
}
slow->next=NULL;//当fast指向最后一个节点且fast与slow的值相同,将不经过while循环里的else步骤,无法实现删除重复节点操作,此时手动删除
return head;
}

查看7道真题和解析