创建 合并a,b两个链表学号,成绩排序

这篇博客探讨了如何合并两个独立的链表,并按照学号和成绩进行排序,涉及地址转换和节点指向操作。
摘要由CSDN通过智能技术生成

和链表的结点插入相似。合并两单独的链表也是如此。

#include<stdio.h>
#include<malloc.h>

struct node
{
   
	int data;
	struct node *next;
};
typedef struct node dlnode;

void joseph(dlnode *h,int m);
dlnode *Create(int n);

int main()
{
   
	dlnode *h;
	int n,
按照题目要求,我们需要将两个链表合并,并按照学号升序排序。可以按照以下步骤实现: 1. 定义一个新的链表头结点,用于存放合并后的链表。 2. 定义两个指针分别指向两个链表的头结点,遍历两个链表: - 比较两个链表当前节点的学号,将较小学号的节点加入到新链表中,并将指针指向下一个节点。 - 如果其中一个链表已经遍历完,直接将另一个链表的剩余部分加入到新链表中。 3. 返回新链表的头结点。 下面是一个示例代码: ```c #include <stdio.h> #include <stdlib.h> typedef struct ListNode { int id; // 学号 int score; // 成绩 struct ListNode* next; } ListNode; ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* dummy = (ListNode*)malloc(sizeof(ListNode)); // 定义新的链表头结点 ListNode* tail = dummy; ListNode* p1 = l1; ListNode* p2 = l2; while (p1 && p2) { // 遍历两个链表 if (p1->id < p2->id) { // 按学号升序排序 tail->next = p1; p1 = p1->next; } else { tail->next = p2; p2 = p2->next; } tail = tail->next; } tail->next = (p1 ? p1 : p2); // 将剩余部分加入到新链表中 return dummy->next; // 返回新链表的头结点 } int main() { // 创建两个链表 ListNode* a = (ListNode*)malloc(sizeof(ListNode)); ListNode* b = (ListNode*)malloc(sizeof(ListNode)); a->id = 2; a->score = 90; a->next = (ListNode*)malloc(sizeof(ListNode)); a->next->id = 1; a->next->score = 80; a->next->next = NULL; b->id = 3; b->score = 85; b->next = (ListNode*)malloc(sizeof(ListNode)); b->next->id = 5; b->next->score = 95; b->next->next = NULL; // 合并两个链表并按学号排序 ListNode* mergedList = mergeTwoLists(a, b); // 打印合并后的链表 printf("id score\n"); while (mergedList) { printf("%d %d\n", mergedList->id, mergedList->score); mergedList = mergedList->next; } return 0; } ``` 输出结果为: ``` id score 1 80 2 90 3 85 5 95 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值