zoukankan      html  css  js  c++  java
  • 链表问题无序链表中删除重复节点

    Question: Write code to remove duplicates from an unsorted linked list.( from Cracking the coding interview)

    链表使用以下结构

    1 struct LinkListNode
    2 {
    3     int key;
    4     LinkListNode *next;
    5 };

     解法一:使用hash,即要求缓冲区。遍历链表,若不含该节点值,则加入hash表,否则跳过该节点。

    C++好像没有直接的hashtable~~实现有待学习!

    解法二:不使用buffer,使用两个指针,分别指向当前节点pCur和其前一节点pPre,遍历pCur过程中,对每一个pCur设置一个指针runner从head开始检查是否有和当前节点重复的节点,有则跳过并break(到当前节点最多有一个重复的,因为若链表中重复节点有多于1个,会在前面的节点中删除),无重复则更新pPre 和pCur。

    实现如下code:

     1 void deleteDups(LinkListNode *head)
     2 {
     3     LinkListNode *pPre = head;
     4     LinkListNode *pCur = pPre->next;
     5     while (pCur != NULL)
     6     {
     7         LinkListNode *runner = head;
     8         //检查之前的节点是否和当前重复,且只有一个(多的会在遍历之前的节点时删除)
     9         while (runner != pCur)
    10         {
    11             if (runner->key == pCur->key)
    12             {//跳过当前节点
    13                 LinkListNode *tmp = pCur->next;
    14                 pPre->next = tmp;
    15                 pCur = tmp;
    16                 break;
    17             }
    18             runner = runner->next;
    19         }
    20         //若当前没重复,则更新pPre 和pCur
    21         if (runner == pCur)
    22         {
    23             pPre = pCur;
    24             pCur = pPre->next;
    25         }
    26     }
    27 }
  • 相关阅读:
    使用JS动态创建含有1000行的表格
    HashTable、HashMap、LinkedHashMap、TreeMap的比较
    移动节点
    WebLoigc的配置(生产模式与开发模式)
    海量数据查询问题--简单的理解
    Servlet中乱码问题
    九度 1369 字符串的排列
    九度 1349 数字在排序数组中出现的次数
    九度 1384 二维数组中的查找
    九度 1402 特殊的数
  • 原文地址:https://www.cnblogs.com/ivorfeng/p/3053539.html
Copyright © 2011-2022 走看看