下面是我實做鏈結串列,輸入數字後用鏈結串列的方式串起來,並且可以選擇要刪除鏈結中頭中尾的數值,但是有一點問題想請教:
#include <stdio.h>
#include <stdlib.h>
struct link
{
int data;
struct link *next;
}*head,*node,*ptr,*temp; //如果這邊用全域變數的方式宣告
//我的副程式呼叫方式正確嗎?
int main(int argc, char *argv[])
{
int no,del;
printf("連續輸入數字,按Ctrl+z結束\n");
while(scanf("%d",&no)!=EOF)
{
node=malloc(sizeof(struct link));
node->data=no;
if(node==NULL)
printf("沒有拿到記憶體\n");
else if(head==NULL)
{
ptr=head=node;
node->next=NULL;
}
else
{
ptr->next=node;
node->next=NULL;
ptr=node;
}
}
printf("鏈結串列輸出:");
list_node();
printf("要刪除哪一個數字:");
scanf("%d",&del);
find_node(del);
list_node();
system("PAUSE");
return 0;
}
int list_node()
{
for(ptr=head;ptr!=NULL;ptr=ptr->next)
printf("%d",ptr->data);
printf("\n");
}
int find_node(int del)
{
ptr=head;
if(ptr->data==del)
{
ptr=ptr->next;
free(head);
head=ptr;
}
else
{
for(ptr=head;ptr->next!=NULL;ptr=ptr->next)
{
if(ptr->next->data==del)
{
if(ptr->next==NULL) //刪除最後一個節點的時候程式會有問題,
ptr->next=NULL; //這兩行出了問題嗎?
else
{
temp=ptr;
temp=ptr->next->next;
ptr->next=temp;
}
}
}
}
}