`
SunnyYoona
  • 浏览: 374094 次
社区版块
存档分类
最新评论

[华为机试练习题]24.删除链表中的重复节点、剩余节点逆序输出

 
阅读更多

题目

描述:     
题目描述:
输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。
要求实现函数: 
void vChanProcess(strNode * pstrIn,strNode * pstrOut);
【输入】 pstrIn:输入一个不带头节点的单向链表
【输出】 pstrOut:删除内容重复的节点(重复的节点全部删除),剩余节点逆序输出(不带头节点,链表第一个节点的内存已经申请)。
【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例 
输入链表的内容依次为 6,7,8,8,9,10,6
则输出链表的内容依次应该是 10,9,7

练习阶段:    中级 

代码

/*---------------------------------------
*   日期:2015-06-31
*   作者:SJF0115
*   题目:删除链表中的重复节点、剩余节点逆序输出
*   来源:华为机试练习题
-----------------------------------------*/
#include <iostream>
#include  <map> 
#include  <vector>
#include "oj.h"
using namespace std;


/*
功能:  输入一个不带头节点的单向链表(链表的节点数小于100),删除链表中内容重复的节点(重复的节点全部删除),剩余的节点逆序倒排。

输入:   pstrIn: 输入一个不带头节点的单向链表

输出:   pstrOut:删除内容重复的节点后,逆序排列的链表(不带头节点,链表第一个节点的内存已经申请)。

返回:

示例:
输入链表的内容依次为 6,7,8,8,9,10,6
则输出链表的内容依次应该是 10,9,7

*/

/*
本代码还是有BUG  当输入链表为 88888888时  pstrOut使用引用最好
*/
int iChanProcess(strNode * pstrIn,strNode * pstrOut){
    if(pstrIn == NULL || pstrOut == NULL){
        return -1;
    }//if
    map<int,int> Map;
    strNode* p = pstrIn;
    // 统计重复出次数
    while(p){
        if(Map.count(p->data) == 0){
            Map.insert(map<int,int>::value_type(p->data,1));
        }//if
        else{
            Map[p->data] = Map[p->data]+1;
        }//else
        p = p->pstrNext;
    }//while
    // 为重复出现的逆序输出到pstrOut
    p = pstrIn;
    vector<int> vec;
    while(p){
        if(Map[p->data] == 1){
            vec.push_back(p->data);
        }//if
        p = p->pstrNext;
    }//while
    int size = vec.size();
    if(size == 0){
        return 0;
    }//if
    for(int i = 0;i < size-1;++i){
        strNode* node = new strNode();
        node->data = vec[i];
        node->pstrNext = pstrOut->pstrNext;
        pstrOut->pstrNext = node;
    }//for
    pstrOut->data = vec[size-1];

    /*printf("\n");
    strNode* p1 = pstrOut;
    while(p1){
        printf("*%d*\n",p1->data);
        p1 = p1->pstrNext;
    }//while*/
    return 0;
}

/* 释放链表 */
void vFreeChan(strNode * pstrChan)
{
    strNode* p = pstrChan;
    while(p){
        strNode* node = p;
        p = p->pstrNext;
        free(node);
    }//while
    return;
}
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    华为机试源代码

    华为机试代码,各种问题,链表合集,二叉树合集,背包问题等 比较难的问题,还有简单的加减乘除等

    华为机试 高级题 链表的整合

    给你一个链表,节点有值域,计数器(表示值出现的次数,初始化为1),指针域,节点的值有重复的,去除重复的值,修改相应节点的计数器。这样做的好处就是节省的很多存储空间。 对即将参加华为机考的同学有非常大的帮助...

    华为OD机试 - 单向链表中间节点(Java & JS & Python & C & C++).html

    华为OD机试 - 单向链表中间节点(Java & JS & Python & C & C++).html付费专栏内容,免费下载,多种语言解法

    华为机试复习资料

    华为的历年题目和复习参考代码,有链表,排序,字符串等

    华为OD机试C卷 - 单向链表中间节点(Java & JS & Python & C & C++).html

    私信博主免费获取真题解析以及代码

    单向链表排序字符串(华为上机题目)

    使用单向链表对字符串进行排序,并以从小到大的顺序显示出来。

    华为OD机试真题-字符串重传排列2023

    在华为OD机试真题中,应聘者需要解决一系列的算法和数据结构问题,例如字符串处理、数组操作、链表操作、树操作、图操作等等。此外,应聘者还需要熟练掌握编程语言,例如C++、Java、Python等等,能够熟练地使用各种...

    华为C语言面试题_嵌入式-常用知识&面试题库_大厂面试真题.doc

    5. 删除链表中的节点 该问题的解决方法是使用指针技术。我们可以定义两个指针,pTemp和pNext,初始时都指向要删除的节点。然后,我们可以将pNext的值赋给pTemp的next指针,并删除pNext节点。 6. 函数调用关系 该...

    华为机试题目

    里面是华为机试题目,给想去华为的人分享下。大约十分三类题目:链表题字符串题数据排序题。

    华为C语言面试题.doc

    给定的代码中,删除链表节点可以通过将要删除的节点的下一个节点的值 copy 到当前节点,然后将当前节点的下一个节点指向下一个节点的下一个节点,最后删除要删除的节点。 六、函数调用关系 函数调用关系是一个非常...

    头插法.doc头插法.doc

    头插法是一种常用的链表插入方法,它可以在链表的头部插入新的节点。下面是头插法的步骤: 1. 创建一个新节点,并将要插入的数据赋值给新节点的数据域。 2. 将新节点的指针域指向原链表的头节点。 3. 将新节点设置为...

    揭秘华为OD机试:如何用Python秒杀面试官的算法题!

    从两数之和到无重复字符的最长子串以及链表问题是数据结构中的难点,每一题都配有详细的解题思路和代码实现。无论你是编程新手还是老司机,这篇文章都将是你的技术提升秘籍。立刻阅读,让你在面试中以技术实力征服...

    最新_互联网公司招聘_笔试_开发_嵌入式软件工程师笔试题华为面试宝典.pdf

    嵌入式软件工程师笔试题华为面试宝典 基于提供的文件信息,我们可以总结出以下知识点: 1. 字符串逆序 在笔试中,出现了将一个字符串逆序的题目。解决这个问题需要使用 C 语言中字符串处理的知识,例如使用指针和...

    华为机考知识点总结1

    本资源主要总结了华为机考的知识点,涵盖了算法、链表、字符串、数组、栈、滑窗、排序、队列等多个方面,旨在帮助考生更好地备考华为机试。 字符串知识点 1. 字符串反转:HJ12题目要求反转输入字符串,考察对字符...

    华为接入控制链表配置

    接入控制链表 ACL接入控制链表 ACL

    华为C++笔试题.doc

    华为 C++ 笔试题 以下是从给定的文件中生成的相关知识点: 1. 静态变量的用途:静态变量在函数体中可以维持其值不变,在模块内可以作为本地全局变量被访问,但不能被模块外的函数访问。 2. 引用与指针的区别:...

    华为机考100例java.rar

    用java语言总结了华为机考100道题,包括递归,堆栈,队列,回溯,数组,字符串,链表,动态规划,DFS算法等,帮助您们顺利通过华为机考。

    华为java面试题.doc

    华为 Java 面试题 面向对象的特征 在 Java 中,面向对象的特征有以下几个方面: 1. 封装(Encapsulation):将对象的状态和行为封装在一起,隐藏实现细节,提供公共接口。 2. 继承(Inheritance):子类继承父类...

    华为校园招聘笔试题大全.doc

    华为校园招聘笔试题大全 华为校园招聘笔试题大全是面向应届毕业生的招聘考试,涵盖了计算机科学和信息技术的多个领域。下面是该考试题库的知识点总结: 1. 静态变量的用途: 静态变量有多种用途,包括: * 在函数...

    华为笔试总结(很全).

    华为笔试总结 本资源摘要信息涵盖了华为笔试的多个知识点,包括编程语言、数据结构、算法、计算机网络、操作系统等方面。 1. 静态变量的用途: 静态变量有多种用途,例如在函数体内,静态变量可以维持其值不变;在...

Global site tag (gtag.js) - Google Analytics