惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
U
Unit 42
人人都是产品经理
人人都是产品经理
罗磊的独立博客
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
aimingoo的专栏
aimingoo的专栏
T
Tailwind CSS Blog
GbyAI
GbyAI
Blog — PlanetScale
Blog — PlanetScale
I
InfoQ
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
B
Blog RSS Feed
WordPress大学
WordPress大学
腾讯CDC
H
Help Net Security
博客园 - Franky
博客园 - 【当耐特】
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
B
Blog
Vercel News
Vercel News
博客园 - 司徒正美

博客园 - 如斯夫

Windows Azure中的Affinity Group .NET内存管理 .NET程序的运行与内存管理 堆栈和堆 应用程序的装载与运行 字符串匹配算法 – Sunday算法 该怎么教育 COM学习 完成了吗? 技术人员面试流程泳道图 创建型模式 C# 数据结构 单链表反转 C# 面试算法 人的问题 foreach中的隐式类型转换 C# 点滴 - 枚举 数据库惊魂 没有人能随随便便成功 If you are a new test manager – From google testing blog
C# 面试题目 单链表中删除重复数据
如斯夫 · 2010-03-04 · via 博客园 - 如斯夫

几个关键点:

需要三个指针:一个指针用来依次遍历链表,另一个指针用来遍历前一个指针后面的链表节点,以与第一个指针指向的节点比较,第三个指针用来存储后一个指针指向节点的前一个节点,有这个指针才能实现删除节点。

        static Node RemoveDup(Node link)
        {
            Node p1 = link;
            Node p2 = p1.next;
            Node pr = p1;

            while (p1 != null)
            {
                pr = p1;
                p2 = p1.next;

                while (p2 != null)
                {
                    if (p1.data == p2.data)
                    {
                        p2 = p2.next;
                        pr.next = p2;
                    }
                    else
                    {
                        pr = p2;
                        p2 = p2.next;
                    }
                }

                p1 = p1.next;
            }

            return link;
        }