链表常用操作 (定义,创建,反转,合并,交叉)
来源:互联网 发布:大地彩票v6 源码 编辑:程序博客网 时间:2024/05/19 01:59
struct Node{
int data;
Node *next;
};
//头插入法
Node* _link_create_head()
{
cout<<"create link head"<<endl;
Node *head=NULL;
Node *p;
for(int i=0;i<=5;i++)
{
p=(Node*)malloc(sizeof(Node*));
p->data=i;
p->next=head;
head=p;
}
return head;
}
//反转
Node* reveseLinkList(Node* head)
{
Node *p1=head, *p2=NULL, *p3=NULL;//用p2反指向p1,p3作为p2的next的记录
if(p1==NULL) return NULL;
p2=p1->next;
while(p2 != NULL)
{
p3=p2->next;
p2->next=p1;
p1=p2;//前移
p2=p3;//前移
}
head->next=NULL;//头变成尾
return p1;
}
//合并
---------一般合并
Node* mergeLinkList(Node* head1, Node* head2)
{
Node *cur1=head1, *cur2=head2, *cur=NULL, *ret;
int i=1;
while(cur1 && cur2)
{
if(cur1->data < cur2->data)//cur1 小,cur1下走,cur为cur1,cur->next即为cur1->next
{
if(cur==NULL)
{
cur=cur1;
ret=cur;
cur1=cur1->next;
cout<<"cur1< && NULL"<<endl;
}
else
{
cur->next=cur1;
cur=cur->next;
cur1=cur1->next;
cout<<"cur1< && NOTNULL"<<endl;
}
}
else//cur2小,cur->next=cur2,cur2下走
{
if(cur==NULL)
{
cur=cur2;
ret=cur;
cur2=cur2->next;
cout<<"cur2< && NULL"<<endl;
}
else
{
cur->next=cur2;//cur1指向cur2的节点
cur=cur->next;
cur2=cur2->next;//cur2向下走
cout<<"cur2< && NOTNULL"<<endl;
}
}
cout<<"*******"<<i<<"******"<<endl;
i++;
}
if(cur1)
cur->next=cur1;
else
cur->next=cur2;
return ret;
}
---------递归合并
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 ;
}
- 链表常用操作 (定义,创建,反转,合并,交叉)
- 链表操作:创建,插入,排序,反转
- 链表操作:创建,插入,排序,反转
- 《单向链表》----------------------合并,反转
- 关于链表结构的基本操作 c 实现 (创建,插入删除,反转,合并链表,查找,是否有环,链表相交情况)
- 链表创建、反转
- 单循环链表-创建、插入、删除、反转等操作
- 链表的基本操作,创建、删除、插入、反转
- 链表的删除 合并 排序 反转
- 链表相关面试题目 反转 合并
- 链表的合并与反转
- 链表创建及反转
- 创建循环双链表,并进行两个链表合并操作
- 算法-链表反转操作
- 合并链表操作
- C语言各种链表操作(创建、打印、删除、插入、反转)
- 链表----增加删除节点、链表反转、链表合并
- 单链表反转 - 有序链表合并 - 子树包含
- 十月下旬腾讯,网易游戏,百度最新校园招聘笔试题集锦
- 教你通透彻底理解:BFS和DFS优先搜索算法
- 使用递归 输出文件树
- 浅谈Javascript面向对象编程
- 登陆csdn 1000次
- 链表常用操作 (定义,创建,反转,合并,交叉)
- GetCurrentThread() returns pseudo handle, not the real handle.
- 【Android】提高Adapter的效率
- priority_queue例子
- 在VO中引用Controller层中的Session State的两种方法
- hdoj 1035(算是水题把)(屏蔽freopen)
- 莫让代码腐化:让营地比你来时更干净
- 项目管理: Maven 让事情变得简单--给您的下一个 Java 构建添加项目管理特性
- hdu1176免费馅饼