笔试题汇集之链表篇(C/C++)
来源:互联网 发布:浏览器调试工具 java 编辑:程序博客网 时间:2024/06/06 07:09
//反转链表
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:有环
//一种O(n)的办法就是(搞两个指针,一个每次递增一步,一个每次递增两步,如果有环的话两者必然重合,反之亦然):
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++)
- 笔试题汇集之常见算法篇(C/C++)
- 笔试题汇集之大数处理篇(C/C++)
- 笔试题汇集之排序算法(C/C++)
- 笔试题汇集之常见算法篇(C/C++)
- 笔试题汇集之大数处理篇(C/C++)
- 笔试题总结之字符串篇(C/C++)
- c++/c笔试题
- C编程 汇集(转自YJ)
- c常见错误汇集
- C语言基础知识汇集
- 笔试之c语言
- C笔试之二
- 软件工程师笔试题(C/C++)
- 软件工程师笔试题(C/C++)
- 软件工程师笔试题(C/C++)
- 软件工程师笔试题(C/C++)
- 笔试面试高频题(C/C++)
- facebook bigpipe Java版本实现
- 可用参数
- 使用aptana+firefox调试javascript
- 第六周 任务四
- linux 文件系统的管理 (硬盘) 工作原理
- 笔试题汇集之链表篇(C/C++)
- ubuntu + nginx + uwsgi
- android box2d小程序
- tokeninput案例
- 开发ssh框架程序推荐的目录结构(转)
- 笔试题汇集之常见算法篇(C/C++)
- 一日一算法
- 基于 Struts2 标签的 BigPipe 技术实现
- 笔试题汇集之大数处理篇(C/C++)