笔试题汇集之链表篇(C/C++)

原创 2012年03月25日 22:13:07

//反转链表

Node* reverse_list(Node* head) {

    if(head ==NULL || head->next == NULL) {

        returnhead;

    }

    Node* p1 =head;

    Node* p2 =head->next;

    Node* p =NULL;

   head->next = NULL;

    while(p2) {

        p =p2->next;

       p2->next = p1;

        p1 = p2;

        p2 = p;

    }

    return p1;

}

 

//在链表指定位置插入节点

Node* insert_list(Node* head, int n, Node* newNode) {

    if(n == 0) {

       newNode->next = head;

        head =newNode;

        returnhead;

    }

    Node* p =head;

    --n;

    while(n--&& p) {

        p =p->next;

    }

    if(p ==NULL) {

        returnNULL;

    }

    Node* temp =p->next;

    p->next =newNode;

   newNode->next = temp;

    return head;

}

 

//链表合并

Node * Merge(Node *head1 , Node *head2)

{

if(head1 == NULL)

return head2;

if (head2 == NULL)

return head1;

Node *head = NULL;

Node *p1 = NULL;

Node *p2 = NULL;

if (head1->data <head2->data)

{

head = head1;

p1 = head1->next;

p2 = head2;

} else {

head = head2;

p1 = head2->next;

p2 = head1;

}

Node *pcurrent = head;

while(p1!=NULL &&p2!=NULL)

{

if(p1->data <=p2->data)

{

pcurrent->next = p1;

pcurrent = p1;

p1 = p1->next;

} else {

pcurrent->next = p2;

pcurrent = p2;

p2 = p2->next;

}

}

if(p1 != NULL)

pcurrent->next = p1;

if(p2 != NULL)

pcurrent->next = p2;

return head;

}

 

 

//递归合并有序链表

Node * MergeRecursive(Node *head1 , Node *head2)

{

if (head1 == NULL)

return head2;

if (head2 == NULL)

return head1;

Node *head = NULL;

if(head1->data <head2->data)

{

head = head1;

head->next =MergeRecursive(head1->next,head2);

} else {

head = head2;

head->next =MergeRecursive(head1,head2->next);

}

return head;

}

 

 

//判断链表是否有环

struct node { char val; node* next;}

 

bool check(const node* head) {} //return false: 无环;true: 有环

 

//一种On)的办法就是(搞两个指针,一个每次递增一步,一个每次递增两步,如果有环的话两者必然重合,反之亦然):

bool check(const node* head)

{

if(head==NULL)

return false;

node *low=head

node *fast=head->next;

while(fast!=NULL&& fast->next!=NULL)

{

low=low->next;

fast=fast->next->next;

if(low==fast)

return true;

}

return false;

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

笔试题汇集之大数处理篇(C/C++)

输入二个64位的十进制数,计算相乘之后的乘积。 答:以下代码为网上别人贴出的,输入任意位数十进制数(包括小数,负数)都可以得出正确结果。 思路是:将大数当作字符串进行处理,也就是将大数用10进制字...

C/C++面试题(2)——查找链表中倒数第k个数

思路是: 用两个指针,第一个指针先向前走k-1 步,然后两个指针一起走,当第一个指针走到尾节点的时候, 第二个指针指向的就是倒数第k个节点。 面试过程中最容易出现的不足: 忘记判断...

微软系列面试题c/c++第一题双向链表

先写的别的,近来学习算法和数据结构,有许多不懂的地方,借助代码提高一下自己的能力。在此,做个计划,每两天写一篇博客,解决一道微软面试题。打算一年之内完成系列博客的更新。也请大家多多探讨。也算是对自己的...

C/C++经典面试题之判断链表是否有环

#include typedef struct list { int data; struct list *next; }LIST; /* Method 1: check the...

面试题一 C/C++面试秘笈之单链表的创建,增删改查及打印

/**面试题1  *编程实现一个单链表 */ typedef struct node{     int data;//节点内容     node * next;//下一个节点 }node; //创...

2011东软校园招聘笔试题部分知识点总结——语言部分(C/C++)

如题,这里简要总结一下今年东软校园招聘笔试题中的一些知识点。东软的笔试题一共有两套,第一套称之为通用能力测试,其实就是智力题。第二套称之为专业能力测试,其实就是计算机专业知识的题。这里总结的一些内容主...

c/c++笔试题(2)(转载的)

c/c++笔试题(2)(转载的) 1.尽管不像非嵌入式计算机那么常见,嵌入式系统还是有从堆(heap)中动态分配内存的过程的。那么嵌入式系统中,动态分配内存可能发生的问题是什么? 这里,我期望应试...

C/C++笔试题2

1.static有什么用途?(请至少说明两种)     1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。     2) 在模块内(但在函数体外),一个被声明为静态的变量可以...

C/C++ linux 嵌入式相关 带答案的笔试题 (2) 汇总~~

转载地址点击打开链接  7.C++中为什么用模板类。 答:(1)可用来创建动态增长和减小的数据结构 (2)它是类型无关的,因此具有很高的可复用性。 (3)它在编译时而不是运行时检查数据类型,保...

【转】C/C++笔试题

1.static有什么用途?(请至少说明两种)    1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。    2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)