题解 | 删除有序链表中重复的元素-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;
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务