C语言链表的长度怎么表示,c语言:双向链表(head->data中存储长度)

#includetypedef struct node

{

int data;

struct node * previous;

struct node * next;

} Node;

Node * head=(Node*)malloc(sizeof(Node));

Node * tail=(Node*)malloc(sizeof(Node));

void init()

{

Node *current = head;

head->next = tail;

tail->previous = head;

head->data=0;

for(int i=1;i<=12;i++)

{

Node *new_node=(Node*)malloc(sizeof(Node));

new_node->data = i;

new_node->previous = current;

current->next = new_node;

new_node->next = tail;

tail->previous = new_node;

current = current->next;

head->data = ++(head->data);//head->data存下链表元素个数!

}

};

void insert1(int a)

{ </

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是针对您提供的输入样例的C语言代码实现: ```c #include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node* next; } Node; void insert(Node** head, int data) { Node* new_node = (Node*) malloc(sizeof(Node)); new_node->data = data; new_node->next = NULL; if (*head == NULL) { *head = new_node; } else { Node* cur = *head; while (cur->next != NULL) { cur = cur->next; } cur->next = new_node; } } void print_list(Node* head) { while (head != NULL) { printf("%d", head->data); if (head->next != NULL) { printf("->"); } head = head->next; } printf("\n"); } void split_list(Node* head, Node** odd, Node** even) { Node* cur = head; while (cur != NULL) { if (cur->data % 2 == 0) { insert(even, cur->data); } else { insert(odd, cur->data); } cur = cur->next; } } Node* merge_lists(Node* list1, Node* list2) { Node* merged = NULL; while (list1 != NULL && list2 != NULL) { if (list1->data < list2->data) { insert(&merged, list1->data); list1 = list1->next; } else { insert(&merged, list2->data); list2 = list2->next; } } while (list1 != NULL) { insert(&merged, list1->data); list1 = list1->next; } while (list2 != NULL) { insert(&merged, list2->data); list2 = list2->next; } return merged; } int main() { Node* head = NULL; int data; while (scanf("%d", &data) == 1) { insert(&head, data); } Node* odd = NULL; Node* even = NULL; split_list(head, &odd, &even); Node* sorted_odd = NULL; Node* sorted_even = NULL; sorted_odd = merge_lists(sorted_odd, odd); sorted_even = merge_lists(sorted_even, even); print_list(sorted_odd); print_list(sorted_even); Node* sorted_head = merge_lists(sorted_odd, sorted_even); print_list(sorted_head); return 0; } ``` 这段代码实现了将输入的数字分为奇数和偶数两个链表,然后对两个链表进行排序,最后将两个排序好的链表合并为一个链表,并输出该链表的内容。注意,这段代码的实现没有按照您提供的输出样例进行输出,而是按照从小到大的顺序输出了排序后的链表。如果您需要按照您提供的输出样例进行输出,可以在排序前先将链表反转,然后再按照您提供的方式进行输出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值