#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++;
}
//单链表制定数据删除
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--;
}
//单链表查找数据显示位置
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("找到数据:%d\n",data);
printf("数据在链表第:%d位置\n",i+1);
break;
}
current = current->next;
i++;
//printf("debuge\n");
}
if(current==NULL)
{
printf("链表没有要找的数据:%d\n",data);
}
}
}
//单链表指定位置插入数据
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("数据已经插入成功:%d\n",data);
}
return 0;
}
//单链表的插入,在链表的第i个位置插入x的元素
//Node*insert(Node*list,int data,int i)
//{
// Node*pre;//pre为前驱结点
// pre = list;
// int tempi = 0;
// for(tempi = 0;tempinext;//查找第i个位置的前驱结点
// if(pre==NULL)
// {
// printf("插入位置不合法\n");
// return list;
// }
// }
// Node*p;//插入的结点为p
// p = (Node*)malloc(sizeof(Node));
// p->data = data;
// p->next = pre->next;
// pre->next = p;
// list->data++;
// return list;
//}
//新建链表方式-反转链表
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("删除链表数据在打印链表\n");
printlist(list);
printf("要找的数据是:%d\n",10);
find(list,10);
printf("查找完成打印链表\n");
printlist(list);
printf("插入数据:%d\n",10);
printf("插入数据位置:%d\n",3);
insert(list,10,3);
printf("插入操作完成后链表\n");
printlist(list);
Node*revert = revert_list(list);
printf("反序操作完成后链表\n");
printlist(revert);
return 0;
}
标签: