笔试题汇集之链表篇(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++笔试题(剑指offer 面试题5 将单向链表数据,逆向打印输出)

#ifndef F_FIND_WORK_TEST5_REVERSE_PRINTF_LIST_20171111_JHASKDFJHASF_H_ #define F_FIND_WORK_TEST5_REV...

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

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

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

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

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

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

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

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

中兴通讯C++/C笔试题及答案

一、请填写BOOL , float, 指针变量 与“零值”比较的 if 语句。(10分) 提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 ...

设计模式C++学习笔记之十一(c/c++面试笔试题)

一、指针与引用有什么区别? 1、指针会占用内存,引用不占用内存。 2、引用在定义时必须初始化。 3、没有空的引用,但是有空的指针。 二、static关键的几个作用 1、函数体内的static变量的...

信大捷安的笔试题(c/c++)

二.猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上在想吃时,就只剩...

2011阿里巴巴集团实习生招聘笔试题 C&C++ 腾讯附加题

公共题 http://blog.csdn.net/wangran51/article/details/8876234 选择题(每题5分) 1. 若一棵二叉树具有10个度为2的结点...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:笔试题汇集之链表篇(C/C++)
举报原因:
原因补充:

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