题解 | 删除有序链表中重复的元素-II

删除有序链表中重复的元素-II

https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
struct ListNode* deleteDuplicates(struct ListNode* head ) {
    // write code here
    if(head==NULL || head->next==NULL)
        return head;

    struct ListNode* dummy = (struct ListNode*)malloc(sizeof(struct ListNode));
    dummy->next = head;
    struct ListNode* prev = dummy, * cur = dummy->next;
    while(cur && cur->next){  
        if(cur->val == cur->next->val){
            // 跳过重复段
            while(cur->next && cur->val==cur->next->val){
                cur = cur->next;
            }
            prev->next = cur->next; // 删除重复段
            // prev指的是重复段的前驱节点,cur指的是重复段的最后一个节点
        }else{
            // 正常向后移动
            prev = cur;
        }
        cur=cur->next;  // 链表遍历后移
    } 

    return dummy->next; 
}

全部评论

相关推荐

10-23 21:54
中南大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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