福州网站建设网络公司排名,开发企业网站多少钱,开发个app多少钱,wordpress模板添加主题本文的内容是使用C语言分割单向链表#xff0c;给出一个链表和一个值#xff0c;要求链表中小于给定值的节点全都位于大于或等于给定值的节点之前#xff0c;打印原始链表的所有元素和经此操作之后链表的所有元素。 分析#xff1a;本题只是单向链表的分割#xff0c;不涉…本文的内容是使用C语言分割单向链表给出一个链表和一个值要求链表中小于给定值的节点全都位于大于或等于给定值的节点之前打印原始链表的所有元素和经此操作之后链表的所有元素。 分析本题只是单向链表的分割不涉及排序因此把小于给定值的节点连成一个链表再把大于等于给定值的节点连成一个链表然后把两个链表再链接到一起即可形成题目要求的链表。 注意要记住两个链表各自的头节点不然最后没办法连接到一起存放大值的链表最后要指向NULL两个链表的头节点要动态申请内存用以保存分割链表后的两个头节点。 完整的源代码如下。
#include stdio.h
#include stdlib.htypedef struct linklist
{int data;struct linklist *next;
}Linklist;Linklist *CreateLinkList()
{int n 0;Linklist *head,*p,*q;head NULL;p (Linklist *)malloc(sizeof(Linklist));printf(input data %d (input 65535 end):,n1);scanf(%d,p-data);if(p-data 65535)return head;while(1){n;if(n1)head p;elseq-next p;q p;p (Linklist *)malloc(sizeof(Linklist));printf(input data %d (input 65535 end):,n1);scanf(%d,p-data);if(p-data 65535)break;}q-next NULL;return head;
}Linklist *divide(Linklist* head,int x)
{Linklist *p (Linklist*)malloc(sizeof(Linklist));Linklist *q (Linklist*)malloc(sizeof(Linklist));Linklist *headp;Linklist *headq;headp p;headq q;while(head ! NULL){if(head-data x){p-next head;p p-next;}else{q-next head;q q-next;}head head-next;}p-next headq-next;q-next NULL;return headp-next;
}void print_linklist(Linklist *head)
{Linklist *p;p head;if(head ! NULL){do{printf(%d ,p-data);p p-next;}while(p ! NULL);printf(\n);}elseprintf(The link list is empty!\n);
}void main()
{Linklist *head;head CreateLinkList();printf(原链表序列);print_linklist(head);head divide(head,10);printf(分割后链表序列);print_linklist(head);
}上面程序的结果如下图所示。 根据上面的运行结果可以看到代码满足题目的要求。