zoukankan      html  css  js  c++  java
  • 【剑指offer】删除链表中重复的结点

    题目链接:删除链表中重复的结点

     

    题意:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

     

    题解:感觉也是数据结构里的常见题。如果找到当前节点的重复节点,就找到它最后一个重复节点。然后用它前一个节点指向它最后一个重复节点的下一个节点即可。考虑一下首元素为重复节点的特殊情况就行了,只需要把头指针更新。

     

    代码:

     1 /*
     2 struct ListNode {
     3     int val;
     4     struct ListNode *next;
     5     ListNode(int x) :
     6         val(x), next(NULL) {
     7     }
     8 };
     9 */
    10 class Solution {
    11 public:
    12     ListNode* deleteDuplication(ListNode* pHead){
    13         if(pHead == NULL)    return NULL;
    14         ListNode* pre = NULL;
    15         ListNode* cur = pHead;
    16         ListNode* pnext = NULL;
    17         
    18         while(cur != NULL){
    19             //当前节点和下一个节点相同
    20             if(cur->next != NULL && cur->val == cur->next->val){
    21                 pnext = cur->next;
    22                 while(pnext->next != NULL && pnext->next->val == cur->val){
    23                     pnext =pnext->next;     //一直找到不相同。
    24                 }
    25                 //如果指向第一个节点,就删除
    26                 if(cur == pHead)    pHead = pnext->next;
    27                 else    pre->next = pnext->next;    //否则就指向下一个
    28                 cur = pnext->next;    //向前走
    29             }
    30             else{    //不相同就向前走
    31                 pre = cur;
    32                 cur = cur->next;
    33             }
    34         }
    35         
    36         return pHead;
    37     }
    38 };
  • 相关阅读:
    bzoj3751 / P2312 解方程
    P1270 “访问”美术馆(树形dp)
    [bzoj1085][SCOI2005]骑士精神
    [bzoj1208][HNOI2004]宠物收养所
    [bzoj1196][HNOI2006]公路修建问题
    [bzoj1093][ZJOI2007]最大半连通子图
    [bzoj1103][POI2007]大都市meg
    [Apio2009][bzoj1179]Atm
    [bzoj1191][HNOI2006]超级英雄Hero
    [bzoj2458][BeiJing2011]最小三角形
  • 原文地址:https://www.cnblogs.com/Asumi/p/12423483.html
Copyright © 2011-2022 走看看