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 };
  • 相关阅读:
    坑人的微信新版支付(V3.3.6)
    Chrome 实现前端页面自动刷新
    css基础
    基础HTML
    HTML5的世界
    Web前端开发的前景与用处
    JavaScript由浅入深(一)——类型、值和变量
    JS常用的方法总结
    js金钱分割,正则
    用 HTML5+ payment方法支付宝支付遇到的坑
  • 原文地址:https://www.cnblogs.com/Asumi/p/12423483.html
Copyright © 2011-2022 走看看