链表的应用[转自CSDN]
设计链表应用程序,要求完成如下操作功能(1)建立一个链表;(2)输出链表各节点的元素值;(3)在链表中从左往右第一个数据为data的链结点前插入一个结点;(4)删除线性链表中从左往右第一个数据为data的链结点;(5)逆转该线性链表。在完成上术基本要求的操作后,要应用功能(2)进行测试。
#include <stdio.h>
#include <stdlib.h>
typedef struct Link
{
int data;
Link *next;
}Link,*pLink;
void insert(pLink *list, int data)
{
if(list == NULL)
{
(*list) = (pLink )malloc(sizeof(struct Link));
(*list)->data = data;
(*list)->next = NULL;
}
else
{
pLink pt = (pLink)malloc(sizeof(struct Link));
pt->data = data;
pt->next =
*list;
*list = pt;
}
}
pLink Create_List(void)
{
pLink list;
int data;
printf("Please input the list's data (-1 for end inputing):\n");
scanf("%d",&data);
while(-1
!= data)
{
insert(&list, data);
scanf("%d",&data);
}
return list;
}
bool delete(pLink *list)
{
pLink pt = (pLink)malloc(sizeof(struct Link));
if((*list) == NULL)
return
false;
pt =
*list;
(*list) = (*list)->next;
free(pt);
pt = NULL;
return
true;
}
void reverse(pLink *list)
{
pLink p1,p2;
if( (*list) == NULL )
return;
if( (*list)->next == NULL )
return;
p1 = (*list)->next;
p2 = p1->next;
while(NULL != p2)
{
(*list)->next = NULL;
p1->next =
*list;
*list = p1;
p1 = p2;
p2 = p2->next;
}
*list = p1;
return;
}
bool delete(pLink *list)
{
pLink pt = (pLink)malloc(sizeof(struct Link));
if((*list) == NULL)
return false;
pt = *list;
(*list) = (*list)->next;
free(pt);
pt = NULL;
return true;
}