#include
#include
#include
typedef struct Node
{
int data;
// int length;
struct Node*next;
}Node;
//單鏈表初始化
Node*inintlist()
{
Node*list = (Node*)malloc(sizeof(Node));
list->data = 0;
list->next = NULL;
return list;
}
//單鏈表頭插入
void headInsert(Node*list,int data)
{
Node*node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = list->next;
list->next = node;
list->data++;
}
//單鏈表尾插法
void tailInsert(Node*list,int data)
{
Node*head = list;
Node*node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
list = list->next;
while(list->next)
{
list = list->next;
}
list->next = node;
head->data++;
}
//單鏈表制定數(shù)據(jù)刪除
void delereInsert(Node*list,int data)
{
Node*pre = list;
Node*current = list->next;
//printf("debuge\n");
while(current)
{
//printf("debuge\n");
if(current->data==data)
{
//printf("debuge\n");
pre->next = current->next;
free(current);
break;
}
pre = current;
current = current->next;
//printf("debuge\n");
}
list->data--;
}
//單鏈表查找數(shù)據(jù)顯示位置
void find(Node*list,int data)
{
int i = 0;
Node*current = list->next;
//printf("debuge\n");
{
while(current)
{
//printf("debuge\n");
if(current->data==data)
{
printf("找到數(shù)據(jù):%d\n",data);
printf("數(shù)據(jù)在鏈表第:%d位置\n",i+1);
break;
}
current = current->next;
i++;
//printf("debuge\n");
}
if(current==NULL)
{
printf("鏈表沒(méi)有要找的數(shù)據(jù):%d\n",data);
}
}
}
//單鏈表指定位置插入數(shù)據(jù)
int insert(Node*list,int data,int pos)
{
int i;
Node*current = list;
////printf("debuge\n");
for(i = 1;inext;
}
if(current!=NULL)
{
Node*node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = current->next;
current->next = node;
list->data++;
printf("數(shù)據(jù)已經(jīng)插入成功:%d\n",data);
}
return 0;
}
//單鏈表的插入,在鏈表的第i個(gè)位置插入x的元素
//Node*insert(Node*list,int data,int i)
//{
// Node*pre;//pre為前驅(qū)結(jié)點(diǎn)
// pre = list;
// int tempi = 0;
// for(tempi = 0;tempinext;//查找第i個(gè)位置的前驅(qū)結(jié)點(diǎn)
// if(pre==NULL)
// {
// printf("插入位置不合法\n");
// return list;
// }
// }
// Node*p;//插入的結(jié)點(diǎn)為p
// p = (Node*)malloc(sizeof(Node));
// p->data = data;
// p->next = pre->next;
// pre->next = p;
// list->data++;
// return list;
//}
//新建鏈表方式-反轉(zhuǎn)鏈表?
Node*revert_list(Node*list)
{
int data;
if(NULL==list->next)
{
return list;
}
Node*p = list->next;
Node*q = NULL;
q = p->next;
while(q)
{??
p->next = q->next;//分離q?
data = q->data;
q = p->next;
headInsert(list,data);//將q插入到首元素位置?
}
return list;
}
//單鏈表遍歷打印
void printlist(Node*list)
{
list = list->next;
while(list)
{
printf("%d ",list->data);
list = list->next;
}
printf("\n");
}
int main()
{
Node*list = inintlist();
//headInsert(list,1);
//headInsert(list,8);
//headInsert(list,2);
//tailInsert(list,10);
//tailInsert(list,4);
//tailInsert(list,5);
//tailInsert(list,6);
//tailInsert(list,7);
printlist(list);
printf("刪除鏈表中的:%d\n",1);
delereInsert(list,1);
printf("刪除鏈表數(shù)據(jù)在打印鏈表\n");
printlist(list);
printf("要找的數(shù)據(jù)是:%d\n",10);
find(list,10);
printf("查找完成打印鏈表\n");
printlist(list);
printf("插入數(shù)據(jù):%d\n",10);
printf("插入數(shù)據(jù)位置:%d\n",3);
insert(list,10,3);
printf("插入操作完成后鏈表\n");
printlist(list);
Node*revert = revert_list(list);
printf("反序操作完成后鏈表\n");
printlist(revert);
return 0;
}
標(biāo)簽: