拆分一个链表为偶数链表和奇数链表
生活随笔
收集整理的這篇文章主要介紹了
拆分一个链表为偶数链表和奇数链表
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
拆分一個鏈表為偶數(shù)鏈表和奇數(shù)鏈表
問題簡述
設(shè)計一個算法,將一個結(jié)點值為自然數(shù)的單鏈表拆分為兩個單鏈表,原表中保留值為偶數(shù)的結(jié)點,而值為奇數(shù)的結(jié)點按他們在原表中的相對次數(shù)組成一個新的單鏈表
代碼實現(xiàn)
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define FLAG -1 //停止輸入的標志 typedef struct Node {int data;struct Node * next; }LNode,*LinkList;void CreateLinkList(LinkList L); void show_List(LinkList L); LNode *Breakupthelist(LinkList La,int *A,int *B);void main() {LinkList La,Lb;int A = 0,B = 0;La = (LinkList)malloc(sizeof(LNode));//創(chuàng)建頭結(jié)點printf("創(chuàng)建單鏈表:\n");CreateLinkList(La);printf("遍歷單鏈表:\n");show_List(La);printf("拆分鏈表:\n");Lb = Breakupthelist(La,&A,&B);//A,B用來判斷全是奇數(shù)或全是偶數(shù)的情況if(A == 0)//全是偶數(shù){printf("偶數(shù)鏈:\n");show_List(La);printf("奇數(shù)鏈為空!\n");}else if(B == 0)//全是奇數(shù){printf("奇數(shù)鏈:\n");show_List(Lb);printf("偶數(shù)鏈為空!\n");}else{printf("偶數(shù)鏈:\n");show_List(La);printf("奇數(shù)鏈:\n");show_List(Lb);}}void CreateLinkList(LinkList L) //尾插法 輸出是輸入的正序 {LinkList s,r;int x;scanf("%d",&x);r = L;while(x != FLAG){s = (LNode *)malloc(sizeof(LNode));s->data = x;r->next = s;r = s;scanf("%d",&x);}r->next = NULL; }void show_List(LinkList L) {LinkList p = L->next;printf("%d",p->data);p = p ->next;while(p != NULL){printf("->%d",p->data);p = p->next;}printf("\n"); }LNode *Breakupthelist(LinkList La,int *A,int *B) //返回奇數(shù)鏈表的頭結(jié)點 {LinkList p,q,r;//r始終指向偶數(shù)鏈的尾部LinkList Lb = (LinkList)malloc(sizeof(LNode));p = La;q = Lb;r = La;p = p->next;while(p){if(p->data % 2 != 0) //奇數(shù){q->next = p;p = p->next;r->next = p;q = q->next;*A = 1;}else{p = p->next;r = r->next;*B = 1;}}q->next = NULL;return Lb; }總結(jié)
以上是生活随笔為你收集整理的拆分一个链表为偶数链表和奇数链表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为正式发布鸿蒙艾,安卓12正式发布,华
- 下一篇: 微信小程序8-云函数