您的位置:首页 > 其它

删除排序链表中的重复元素

2017-03-26 15:55 288 查看

问题描述:

给定一个排序链表,删除所有重复的元素每个元素只留下一个。

样例:给出1->1->2->NULL;返回1->2->NULL。

实现思路:

先考虑链表为空时的特殊情况;再考虑一般情况:定义两个指针变量p和q,初始时,P指向链表中的第一个元素,q指向链表中的第二个元素。如果p和q的值相等时,就删除q指针指向的节点。如果p和q的值不相等,则分别向后移一个节点。

代码:

ListNode *deleteDuplicates(ListNode *head) {

        if (head == NULL) {

            return head;

        }

           ListNode *p, *q;

           p = head;

           q = head->next;

           while (q != NULL) {

               if ( p->val == q->val ) {

                   p->next = q->next;

                   q = q->next;

               }  else  {

                     p = q;

                     q = q->next;

                     }

          }

          return head;

    }

感想:

一开始只定义了一个指针变量,当重复的元素超过两个时就无法删除所有的重复元素只留下一个。定义两个指针变量,先固定一个指针P,另一个指针向后移动,直到删除所有与P指向的节点有相同值的节点。然后p和q再分别向后移动一个节点。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: