您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法面试题80道(24)

2016-03-13 14:21 471 查看
第24题:

链表操作,

(1).单链表就地逆置,

(2)合并链表

#include<stdio.h>

struct node{
int data;
node* next;
};

//就地逆转
node * reverseLink(node* head){
node *p,*r;

p=head->next;
head->next=NULL;

while(p){
r=p->next;
p->next=head->next;
head->next=p;
p=r;
}

return head;
}

//合并链表
node* mergeLink(node *a,node *b){
node *head,*p;
head=a;
a=a->next;
b=b->next;
p=head;
while(a&&b){
if(a->data>b->data){
p->next=b;
p=p->next;
b=b->next;
}else{
p->next=a;
p=p->next;
a=a->next;
}
}
while(a){
p->next=a;
p=p->next;
a=a->next;
}
while(b){
p->next=b;
p=p->next;
b=b->next;
}

return head;
}

//打印链表
void printfLink(node *l){
node *p=l->next;
while(p!=NULL){
printf("%d\t",p->data);
p=p->next;
}
printf("\n");
}

//创建链表,
node* creatLink(){
node *l=new node();
node *r=l;
int x;

printf("请输入链表,ctrl+z结束输入\n");
while(~scanf("%d",&x)){
node* p=new node();
p->data=x;
p->next=NULL;
r->next=p;
r=r->next;
}
return l;
}

int main(){//test
node *a=NULL;
a=creatLink();
printfLink(a);
node *b=NULL;
b=creatLink();
printfLink(b);
node *c=NULL;
c=mergeLink(a,b);
printfLink(c);
reverseLink(c);
printfLink(c);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: