基础差,一面刷,重基础,东山起

给定一个已排序的单链表,去除单链表中的重复元素,只保留一个重复的元素,并且返回新的单链表。

例如: 
给出1->2>3->3->3->4,你的函数调用之后必须返回1->2->4。

#include <iostream>

using namespace std;


class Node{
        public:
        int value;
        Node* next;
        Node(int value_){value=value_;next=NULL;}
} ;

int main()
{
    Node*p= new Node[8]{1, 2 ,3 ,4, 5,5,5,6};
    for(int i=0 ; i<7 ;i++ )
    {
        (p+i)->next=(p+i+1);
    }
    (p+7)->next= NULL;
    for(Node*x=p; x!=NULL ;x=x->next )
    cout<<x->value<<endl;
    cout<<"***********************************************"<<endl;

    Node* last=p;
    Node* current=p->next;
    Node* next=current->next;
    while(current->next!=NULL)
    {
        if(current->value==next->value){
                while(current->value==next->value){
                        current=current->next;
                        next=next->next;
                }
                last->next=next;
        }
        else{
                last=last->next;
                current=current->next;
                next=next->next;
        }
    }
    for(Node*x=p; x!=NULL ;x=x->next )
    cout<<x->value<<endl;

    return 0;
}

总结,
1.现场使用的是用数组记录已知链表节点的值,每次遍历下一节点查一下数组中有没有重复,重点是漏看了已排序,就导致麻烦的思想。

2.其次一开始没定义链表结构,而且可笑的节点我居然起名为link,估计当时紧张脑子太热。

3做出了一道逻辑题后主动提出再看下编程题,后来用了双向链表,考官说题目没说双向链表,而且是考官问我写完了没,我就拿过去给他看,最后有一个指针还没来得及写就交卷我真的是佩服自己的脑残。

4.最后挽救似的提出用一下栈,比较top()和读取的链表节点值,相同就弹出,链表继续向下遍历,最后链表遍历结束时,弹出元素并重做一个链表。考官也是压根没理。

5最后考官让我学学php可能好找工作。我觉得我还是初心不变,基础差就是基础差,我多练练基本数据结构和代码,也就撑死10天就很熟悉了。我自我认为我的算法思想,还有基本理论知识还是比较有基础的,只是代码编的少,学校学习太注重理论了。


吐槽点!::我认为面试官没有看到我的亮点以及突破点,虽然面试官非常友善,但是一边自己工作,一边给我们面试还是让我内心很不舒服,而且居然一次两个人。(估计是他工作没做完,上来就给我题然后自己写自己的工作去了)后来看我用matlab和spss也是只说我们用不上这种工具,没有考虑过给我转推的可能,我有些失望。

教训点:基础是核心,多些基本的数据结构和算法,不要眼高手低,一定静下心来练习一些基本的。矩阵堆栈队列非常熟悉以后,二叉树搜索树,这些一个个过。之后再去熟悉五大算法,实现每一个典型例题。业余可以继续看看深度学习和大数据处理相关的知识,并且我打算九月秋招前实现一下tcp,udp。尽管会有困难,不过我的博文有代码,而且我有网络方面的知识我相信我可以做出来。


ps最后这个算法在电脑上敲出来,也就十五分钟,所以可以说当时面试发挥真的很差劲了。

阅读更多
上一篇五大算法小结
下一篇尾插法创建链表
想对作者说点什么? 我来说一句

无刷直流电机(BLDC)基础.pdf

2014年05月09日 582KB 下载

没有更多推荐了,返回首页

关闭
关闭