單鏈表結點刪除 C語言實現
阿新 • • 發佈:2019-01-10
實現程式碼:
#include<stdlib.h>
#include<stdio.h>
#define N 15
typedef struct linklist
{
int data;
struct linklist *next;
}list, *plist;
/*建立連結串列*/
void create_list(plist* head)
{
int i;
if (NULL == *head)/*若頭為空,插入第一個元素1*/
{
plist phead = (plist)malloc(sizeof(list ));
phead->data = 1;
phead->next = NULL;
*head = phead;
}
for (i = 2; i < N + 1; i++)/*插入資料2~15*/
{
plist p = (plist)malloc(sizeof(list));
p->data = i;
p->next = *head;
*head = p;
}
}
/*列印輸出*/
void print_list(plist head)
{
plist p = head;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
/*刪除結點*/
void delete_node(plist* head, int num)
{
plist elem = *head;
plist temp = NULL;
if (elem->data == num)
{
*head = elem->next;
free(elem);
return ;
}
else
{
while (elem != NULL)
{
temp = elem;
elem = elem->next;
if (NULL == elem)
{
printf("\n------------未找到要刪除的結點----------------\n\n");
return;
}
else if (elem->data == num)/*找到data值為num的結點*/
{
temp->next = elem->next; /*elem前一個結點的next指向elem元素後一個結點*/
free(elem);/*釋放被刪除的結點佔用的空間*/
break;
}
}
}
}
void main()
{
int num;
plist head;
head = NULL;
create_list(&head);
printf("請輸入要刪除的結點(1~15):\n");
scanf("%d", &num);
printf("刪除結點之前:\n");
print_list(head);
delete_node(&head, num);
printf("刪除結點之後:\n");
print_list(head);
system("pause");
}