close

前言:設計一支程式將鏈結串列分成基數串列和偶數串列


#include<stdio.h>
#include<string.h>
#define A_No 1
#define Z_No 26

typedef struct node{

int data;

struct node *next;

}NODE;


int countList(NODE *head);

void reverseList(NODE **head);

void split(NODE *head,NODE **h1,NODE **h2);

void printList(NODE *head);

void updateList(NODE *head);

int main(void)
{

NODE *head=NULL;

NODE *h1=NULL;

NODE *h2=NULL;

NODE A={3,NULL};

NODE B={4,NULL};

NODE C={5,NULL};

NODE D={7,NULL};

NODE E={8,NULL};


head=&A;

A.next=&B;

B.next=&C;

C.next=&D;

D.next=&E;

E.next=NULL;

printList(head);

split(head,&h1,&h2);

printList(h1);

printList(h2);

return 0;
}


void split(NODE *head,NODE **h1,NODE **h2)
{

NODE *tail1=NULL, *tail2=NULL;

while(head!=NULL)

{

if((head->data)%2!=0)

{

if(*h1==NULL){

*h1=head;

head=head->next;

tail1=*h1;

tail1->next=NULL;

}else{

tail1->next=head;

head=head->next;

tail1=tail1->next;

tail1->next=NULL;

}

}else{

if(*h2==NULL){

*h2=head;

head=head->next;

tail2=*h2;

tail2->next=NULL;

}else{

tail2->next=head;

head=head->next;

tail2=tail2->next;

tail2->next=NULL;

}

}

}

}

int countList(NODE *head)
{

int listcount=1;

struct node *P=head;

while(P->next!=NULL)

{

listcount++;

P=P->next;

}

return (listcount);
}

void reverseList(NODE **head)
{

NODE *p=*head;

NODE *q=*head;


p=p->next;

q->next=NULL;


while(p!=NULL)

{

q=p;

p=p->next;

q->next=*head;

*head=q;

}

}

void updateList(NODE *head)
{

struct node *P=head;

while(1)

{

P->data=(P->data==A_No)?Z_No:P->data;

if(P->next!=NULL)

P=P->next;

else

break;

}

}

void printList(NODE *head)
{

struct node *P=head;


printf("Linked List data:");

while(1)

{

printf("%d",P->data);

if(P->next==NULL)

{

printf("\n");

break;

}

else

{

P=P->next;

printf("->");

}

}

}



arrow
arrow
    全站熱搜
    創作者介紹
    創作者 GavinHuang 的頭像
    GavinHuang

    Gavin的部落格

    GavinHuang 發表在 痞客邦 留言(0) 人氣()