题目:
链表操作:
1. 单链表就地逆置
2. 合并链表
数据结构基础题
代码实现(GCC编译通过)
#include "stdio.h"
#include "stdlib.h"
typedef struct node
{
int data;
struct node * next;
}link;
link * ReverseLink(link * head);
link * AddLink(link * h1,link * h2);
int main(void)
{
link *head,*p;
int i;
srand((unsigned int)time(0));
head = p = (link *)malloc(sizeof(link));
head-> data = rand()%101;
head-> next = NULL;
for(i=1;i<10;i++)
{
p = p->next = (link *)malloc(sizeof(link));
p->data = rand()%101;
p->next = NULL;
}
for(p = head;p;p=p->next)
printf("%d",p->data);
head = ReverseLink(head);
printf("\n");
for(p = head;p;p=p->next)
printf("%d",p->data);
printf("\n");
return 0;
}
link * ReverseLink(link * head)
{
link * p, *r;
p = head->next;
head->next = NULL;
while(p)
{
r = p->next;
p->next = head;
head = p;
p = r;
}
return head;
}
link * AddLink(link * h1,link * h2)
{
link * head,* p;
if(h1->data > h2->data)
{
head = h2;
h2 = h2->next;
}
else
{
head = h1;
h1 = h1->next;
}
p = head;
while(h1 && h2)
{
if(h1->data > h2->data)
{
p->next = h2;
h2 = h2->next;
p = p->next;
}
else
{
p->next = h1;
h1 = h1->next;
p = p->next;
}
}
if(h1)
p->next = h1;
else
p->next = h2;
return head;
}