遍历升序链表程序
校招时部分企业笔试将禁止编程题跳出页面,为提前适应,练习时请使用在线自测,而非本地IDE。
描述
建立一个升序链表并遍历输出。
输入描述: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。
输出描述: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出。
输入: 4 3 5 7 9
输出: 3 5 7 9
程序编写思路
- 建立一个typedef结构体
- 以尾插法建立单链表
- 对单链表元素进行从小到大排序
- 排序后进行完整遍历
- 建立时需要设计头节点
程序编写介绍
- 结构体代码
typedef struct NODE{
int data;
struct NODE * next;
}NODE,*PNODE;
2.创建单链表
PNODE create(){
int n,i;
int val;
scanf("%d",&n);
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if(pHead == NULL){
exit(-1);
}
PNODE pTail = pHead;
pTail->next = NULL;
for(i = 0;i<n;i++){
scanf("%d",&val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(pNew == NULL){
exit(-1);
}
pNew->data = val;
pTail->next = pNew;
pNew->next = NULL;
pTail = pNew;
}
return pHead;
}
3.求链表长度函数
int length_list(PNODE pHead){
PNODE p = pHead->next;
int len = 0;
while(p != NULL){
len++;
p = p->next;
}
return len;
}
4.链表数据排序 模仿冒泡排序的思路进行设计
void sort_list(PNODE pHead){
int i,j,temp;
PNODE p,q;
int n = length_list(pHead);
for(i = 0,p = pHead->next;i<n-1;i++,p=p->next){
for(j = i+1,q = p->next;j<n;j++,q= q->next){
if(p->data > q->data){
temp = p->data;
p->data = q->data;
q->data = temp;
}
}
}
}
5.遍历函数
void traverse(PNODE pHead){
PNODE p = pHead->next;
while(p != NULL){
printf("%d ",p->data);
p = p->next;
}
}
6.main函数
int main(){
PNODE pHead = NULL;
pHead = create();
sort_list(pHead);
traverse(pHead);
return 0;
}
完整程序
#include<stdio.h>
#include<malloc.h>
typedef struct NODE{
int data;
struct NODE * next;
}NODE,*PNODE;
PNODE create(){
int n,i;
int val;
scanf("%d",&n);
PNODE pHead = (PNODE)malloc(sizeof(NODE));
if(pHead == NULL){
exit(-1);
}
PNODE pTail = pHead;
pTail->next = NULL;
for(i = 0;i<n;i++){
scanf("%d",&val);
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(pNew == NULL){
exit(-1);
}
pNew->data = val;
pTail->next = pNew;
pNew->next = NULL;
pTail = pNew;
}
return pHead;
}
int length_list(PNODE pHead){
PNODE p = pHead->next;
int len = 0;
while(p != NULL){
len++;
p = p->next;
}
return len;
}
void sort_list(PNODE pHead){
int i,j,temp;
PNODE p,q;
int n = length_list(pHead);
for(i = 0,p = pHead->next;i<n-1;i++,p=p->next){
for(j = i+1,q = p->next;j<n;j++,q= q->next){
if(p->data > q->data){
temp = p->data;
p->data = q->data;
q->data = temp;
}
}
}
}
void traverse(PNODE pHead){
PNODE p = pHead->next;
while(p != NULL){
printf("%d ",p->data);
p = p->next;
}
}
int main(){
PNODE pHead = NULL;
pHead = create();
sort_list(pHead);
traverse(pHead);
return 0;
}
|