按照升序建立单链表

题目描述
建立一个升序链表并遍历输出。

输入描述:
输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数。
输出描述:
可能有多组测试数据,对于每组数据,
将n个整数建立升序链表,之后遍历链表并输出。
示例1

输入
4
3 5 7 9

输出
3 5 7 9
总结
这道题是要根据输入的整数建立一个升序链表,输入的时候并不是排好序的,要边建立链表边排序

#include<stdio.h>
#include<stdlib.h>
typedef struct node{
	int data;
	struct node *next;
}*LinkList,LNode;

void insert(LinkList head,int num);
void trans(LinkList head);
int main(){
	LinkList head;
	int n,num;
	head=(LinkList)malloc(sizeof(LNode));
	head->next=NULL;
	scanf("%d",&n);
	while(n--){
		scanf("%d",&num);
		insert(head,num);
	}
	trans(head);
	return 0;
}
//边输入边排序
void insert(LinkList head,int num){
	LinkList pre,p,q;
	pre=head;
	p=pre->next;
	while(p){
		if(p->data<num){	//如果值大,则指针后移
			pre=p;
			p=p->next;
		}
		else
			break;			//找到插入位置,跳出
	}
	//考虑到链表为空的时候的情况,直接插入在后面
	q=(LinkList)malloc(sizeof(LNode));
	q->data=num;
	pre->next=q;
	q->next=p;
}
//遍历
void trans(LinkList head){
	LinkList p;
	p=head->next;
	while(p){
		printf("%d ",p->data);
		p=p->next;
	}
	printf("\n");
}
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
)并且按照升序排序,删除重复的元素。 我理解您需要一个 C 语言代码,该代码可以处理一个给定的升序链表,只保留独立的元素并且进行升序排序,同时删除重复的元素。以下是该问题的代码实现: ```c #include <stdio.h> #include <stdlib.h> struct ListNode { int data; struct ListNode* next; }; void add_node(struct ListNode** head_ref, int new_data) { struct ListNode* new_node = (struct ListNode*)malloc(sizeof(struct ListNode)); new_node->data = new_data; new_node->next = (*head_ref); (*head_ref) = new_node; } void remove_duplicates(struct ListNode* head) { struct ListNode* current = head; while(current != NULL) { struct ListNode* runner = current; while(runner->next != NULL) { if(current->data == runner->next->data) { struct ListNode* temp = runner->next; runner->next = runner->next->next; free(temp); } else { runner = runner->next; } } current = current->next; } } void sort_list(struct ListNode* head) { int temp; struct ListNode* temp_node = head; while(temp_node != NULL) { struct ListNode* current = temp_node->next; while(current != NULL) { if(temp_node->data > current->data) { temp = temp_node->data; temp_node->data = current->data; current->data = temp; } current = current->next; } temp_node = temp_node->next; } } void print_list(struct ListNode* head) { struct ListNode* temp_node = head; while(temp_node != NULL) { printf("%d ", temp_node->data); temp_node = temp_node->next; } } int main() { struct ListNode* head = NULL; add_node(&head, 8); add_node(&head, 7); add_node(&head, 6); add_node(&head, 6); add_node(&head, 5); add_node(&head, 4); add_node(&head, 3); add_node(&head, 3); add_node(&head, 2); add_node(&head, 1); sort_list(head); remove_duplicates(head); // 输出结果 print_list(head); return 0; } ``` 该代码首先定义了链表结构体(ListNode)。add_node 函数用于添加新的节点到链表中,remove_duplicates 函数用于删除链表中的重复节点,sort_list 函数用于按照升序链表进行排序,print_list 函数用于将链表中的所有元素打印出来。在 main 函数中,我们先创建一个具有重复元素的升序递归链表,然后对其进行排序和删除重复节点,最后打印出链表。 该代码主要思路是通过两个循环,外层循环遍历链表中的每一个元素,把当前元素保存到 current 指针中,然后内层循环从 current 开始遍历所有元素,如果有重复元素,就使用 free() 函数将这些重复元素删除,否则直接跳过。之后再使用另一个循环,将链表进行升序排序。最后通过 print_list 函数将链表中的所有元素打印出来。 希望这段代码可以帮到您,如果还有其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值