Untitled
unknown
plain_text
3 years ago
2.3 kB
5
Indexable
#include <stdio.h> #include <stdlib.h> //#include "function.h" void printList(Node *head){ Node *temp; for(temp = head; temp!=NULL; temp=temp->next) { printf("%d ", temp->data); } } void freeList(Node *head){ Node *temp; for(temp=head; temp!=NULL; temp=head){ head = head->next; free(temp); } } int main() { Node *head; int data; head = createList(); while(1){ scanf("%d", &data); if(data>-1){ deleteNode(&head,data); }else break; } printList(head); freeList(head); return 0; } #include <stdlib.h> #include <stdio.h> typedef struct _Node { int data; struct _Node *next; } Node; //上面是題目附的,下面是我朋友寫的 void deleteNode(Node ** nd, int data){ Node* current=*nd; Node* previous=*nd; //case 1 無頭騎士 if(*nd==NULL) return; //case 2 上斷頭台 else if(data==1){ *nd=current->next; free(current); current=NULL; }//case 3 循線追殺 else{ while(data!=1){ previous=current; current=current->next; data--; } previous->next=current->next; free(current); current=NULL; } } Node* createList(){ Node* temp_head; Node* previous; Node* current; int in,count; while(1){ scanf("%d",&in); if(in==-1) break; count++; if(count==1){ //只要做頭 temp_head=(Node*)malloc(sizeof(Node)); temp_head->data=in; temp_head->next=NULL; }else if(count==2){ //做出頭跟一個current current=(Node*)malloc(sizeof(Node)); temp_head->next=current; current->data=in; current->next=NULL; }else{ //用previous存前一個current,在做一個新的current previous=current; current=(Node*)malloc(sizeof(Node)); previous->next=current; current->data=in; current->next=NULL; } } if(count==0) temp_head=NULL; return temp_head; }
Editor is loading...