题目1181:遍历链表
题目描述:
建立一个升序链表并遍历输出。
输入:
输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。
输出:
可能有多组测试数据,对于每组数据,
将n个整数建立升序链表,之后遍历链表并输出。
样例输入:
4
3 5 7 9
样例输出:
3 5 7 9
来源:
2000年华中科技大学计算机研究生机试真题
/*********************************
* 日期:2016-1-9
* 作者:Pt
* 题号: 九度OJ 题目1181:遍历链表
* 来源:http://ac.jobdu.com/problem.php?pid=1181
* 结果:AC
* 来源:2000年华中科技大学计算机研究生机试真题
* 总结: 1.可能有多组测试数据!!! 2.思路要清晰 3.* 与 &
**********************************/
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode * next;//struct
}LNode;
typedef LNode* LinkList;
LinkList InitL(void);
void UpAdd(LinkList L, int t);
void printL(LinkList L);
int main()
{
LinkList link_list;
int n, i, t;
while(scanf("%d", &n)==1) //可能有多组测试数据!!!
{
link_list = InitL();
for(i = 0; i < n; i ++)
{
scanf("%d", &t);
UpAdd(link_list, t);
}
printL(link_list);
}
return 0;
}
LinkList InitL(void)
{
LinkList link_list;
link_list = (LinkList)malloc(sizeof(LNode));
link_list-> next = NULL;
return link_list;
}
void UpAdd(LinkList L, int t)
{
LinkList p = L;
LinkList q = (LinkList)malloc(sizeof(LNode));
q -> data = t;
q -> next = NULL;
while(p -> next != NULL && t > p-> next -> data)
p = p -> next; //寻找插入位置p,在p之后插入
if(p -> next == NULL)
p -> next = q;
else
{
q -> next = p -> next;
p -> next = q;
}
}
void printL(LinkList L)
{
LinkList p = L->next;
while(p != NULL)
{
if(p->next == NULL)
printf("%d\n", p -> data);
else
printf("%d ", p->data);
p = p -> next;
}
}
我的血泪史
不说了,吃饭去,下午复习电路 〒_〒