今天粗略学习了一点链表,但是做题的时候发现好多操作不知道该怎么动手,所以今天只做出一个题。
题目描述
(线性表)已知不带头结点的线性链表list,链表中结点构造为(data、link),其中data为数据域,link为指针域。请写一算法,将该链表按结点数据域的值的大小从小到大重新链接。要求链接过程中不得使用除该链表以外的任何链结点空间。
输入格式
自定义链表节点数
m=5
3 1 5 4 6
输出格式
1 3 4 5 6
样例输入content_copy
8
10 1 5 14 32 55 67 6
样例输出content_copy
1 5 6 10 14 32 55 67
思路:就是用冒泡法排序
代码如下
#include <stdio.h>
struct math
{
int a;
struct math *next;
};
int main()
{
int n;
scanf("%d",&n);
struct math *head,*p,*q;
p=head=(struct math*)malloc(sizeof(struct math));
int i,j,temp;
for(i=0; i<n; i++)
{
q=(struct math*)malloc(sizeof(struct math));
scanf("%d",&q->a);
p->next=q;
p=p->next;
}
p->next=NULL;
p=head->next;
for(i=1; i<n; i++,p=p->next)
for(q=p->next; q!=NULL; q=q->next)
if(p->a>q->a)
{
temp=p->a;
p->a=q->a;
q->a=temp;
}
p=head->next;
do
{
printf("%d ",p->a);
p=p->next;
}while(p!=NULL);
return 0;
}
题目描述
(线性表)已知一单链表,从第二个结点至表尾递增有序,(设a1<x<an)如下图(“第二个结点至表尾”指a1..an )。试编写程序,将第一个结点删除并插入表中适当位置,使整个链表递增有序。
输入格式
输入长度n:7
输入数据:4 1 2 3 6 8 9
输出格式
1 2 3 4 6 8 9
样例输入content_copy
5
11 7 8 9 10
样例输出content_copy
7 8 9 10 11
这一题,不知道怎么插入,所以直接重排了,代码和上一题一样就不发了
总结:链表有些不懂导致题目即使有思路也做不出来,希望这几天能多努点力。