删除有序链表中重复的元素(NC25/考察次数Top62/难度简单)

该博客介绍了一种C++实现的方法,用于删除有序链表中的重复元素,保持链表中每个元素只出现一次。通过双指针技巧,遍历链表并删除重复节点,确保链表的顺序不变。适合于准备面试和提升编程技能的读者,特别是对数据结构和算法感兴趣的开发者。
摘要由CSDN通过智能技术生成

描述:
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为1→1→2,返回1→2.
给出的链表为1→1→2→3→3,返回1→2→3.

示例1
输入:
{1,1,2}
返回值:
{1,2}
(题目来自牛客网)

用C++实现如下

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */
 
class Solution {
public:
    /**
     *
     * @param head ListNode类
     * @return ListNode类
     */
    ListNode* deleteDuplicates(ListNode* head) {
        //思路,判断后面的val值是否与当前的val值相等,有点类似于选择法进行排序
        if(head == NULL)
        {
            return NULL;
        }
        //注意找重复值这种问题,可以使用选择发进行遍历
        for(ListNode* i=head; i != NULL; i=i->next)                    //确定当前的位置,从第一个开始,依次遍历
        {
            for(ListNode* j=i->next; j != NULL; j=j->next)             //当前位置的下一个位置,依次往后遍历
            {
                if(j->val == i->val)
                {
                    i->next = j->next;                                 //两者相等则当前位置可以后移
                }
            }
        }
        return head;
    }
};

纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!

评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值