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

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

http://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79

思路:
由于链表中的数字是有序排列的,所以相同的数字一定是排在一起的,因此在寻找重复数字的时候只需要对比相邻两数的值是否相等即可,而对于链表,删除数据就是让指针指向改变,伪代码就是
head->next=head->next->next;
但是需要注意的点是,重复数字不一定只有两个,所以删除数据和指针移位这两个操作不能同时进行,因为同时进行只能删除一个数据。
代码如下:

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* deleteDuplicates(ListNode* head) {
        // write code here
        if(head==NULL)
        {
            return NULL;
        }
        if(head!=NULL && head->next==NULL)
        {
            return head;
        }
        ListNode* temp=head;
        while(temp!=NULL && temp->next!=NULL)
        {
            if(temp->val==temp->next->val)
            {
                ListNode* pCurrent = temp->next;
                temp->next=pCurrent->next;//删除数据
            }
            else//一定要注意这一点
            {
                temp=temp->next;//指针移动
            }

        }
        return head;
    }
};
牛客刷题记录 文章被收录于专栏

记录自己的刷题记录,刷过的题的解法

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-24 20:55
阿里国际 Java工程师 2.7k*16.0
程序员猪皮:没有超过3k的,不太好选。春招再看看
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务