要求編寫一個函數split(),將鏈接表的內容複製到另外兩個鏈表中。該函數將具有偶數索引(0,2等)的節點複製到EvenList以及具有奇數索引的節點到oddList。原始鏈接列表不應該被修改。假設evenlist和oddlist將作爲空列表傳遞給函數(* ptrEvenList = * ptrOddList = NULL)。將鏈表拆分爲另外兩個表,其中一個具有奇數索引,另一個具有偶數索引
在我的程序中它可以顯示最初的列表。另外兩個列表有問題。它會導致程序的終止。
#include<stdio.h>
#include<stdlib.h>
#define SIZE 9
//定義
typedef struct node{
int item;
struct node *next;
}ListNode;
//調用函數
int search(ListNode *head,int value);
void printNode(ListNode *head);
void split(ListNode *head,ListNode **OddList,ListNode **EvenList);
//主要功能
int main(){
ListNode *head=NULL;
ListNode *temp;
ListNode *OddList=NULL;
ListNode *EvenList=NULL;
//在節點列表的結構這個問題,它要求我通過兩個空白列表功能 'slipt'
int ar[SIZE]={1,3,5,2,4,6,19,16,7};
int value=0;
int i;
head=(struct node*)malloc(sizeof(ListNode));
temp=head;
for(i=0;i<SIZE;i++){
temp->item=ar[i];
if(i==(SIZE-1)) //last item
break;
temp->next=(struct node*)malloc(sizeof(ListNode));
temp=temp->next;
}
temp->next=NULL;
printf("Current list:");
printNode(head);
split(head,&OddList,&EvenList);
return 0;
}
**** !!!!!!!!! 我認爲這個部分是這個問題。
void split(ListNode *head,ListNode **ptrOddList,ListNode **ptrEvenList){
int remainder;
ListNode *tempO,*tempE,*temp;
if (head==NULL)
return;
else{
temp=head;
*ptrOddList=(struct node*)malloc(sizeof(ListNode));
*ptrEvenList=(struct node*)malloc(sizeof(ListNode));
tempO=*ptrOddList;
tempE=*ptrEvenList;
while(temp!=NULL){
remainder=temp->item%2;
if(remainder==0){
tempE->next=(struct node*)malloc(sizeof(ListNode));
tempE->item=temp->item;
tempE=tempE->next;
}
else{
tempO->next=(struct node*)malloc(sizeof(ListNode));
tempO->item=temp->item;
tempO=tempO->next;
}
temp=temp->next;
}
tempE=NULL;
tempO=NULL;
//我也試過tempE->next=NULL;
和tempO->next=NULL
//程序,如果我修改它像上面,但顯示的最後兩個數字將是兩個隨機數可以運行。
printf("Even List:");
printNode((*ptrEvenList));
printf("Odd List:");
printNode((*ptrOddList));
}
}
//函數用來打印出結果
void printNode(ListNode *head){
if (head==NULL)
return;
while(head!=NULL){
printf("%d ",head->item);
head=head->next;
}
printf("\n");
}
請縮小它,沒有人會看那麼多的代碼 – 2013-03-24 13:47:54