小白的复杂链表
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable : 4996)//visual studio 让删除的警告信息
struct node
{
int data;
node* next;
};
int main()
{
int i, n;
node* head, * p1, * p2;
p1 = p2 = head = NULL;//visual studio让 指针得初始化
printf("输入数据:");
scanf("%d", &n);
for(i=1;i<n;i=i+2)//建立单链表
{
if (p2 == NULL)
{
head=p1 =p2= (struct node*)malloc(sizeof(struct node));
p1->data = i;
}
else
{
p1 = (struct node*)malloc(sizeof(struct node));
p1->data = i;
p2->next = p1;
p2 = p1;
}
}p2->next = NULL;
node* p;
// 输出链表数据
for (p=head; p != NULL; p = p->next)
printf("**%d**\n", p->data);
printf("\n");
//链表的删除
node* p3,*p4,*p5;
int m;
printf("请输入要删除的数据:");
scanf("%d",&m);
p3 = head;
p4 = head->next;
while (1)
{
if (p3->data==m)//对于头节点的删除操作
{
free(p3);
head = p4;
break;
}
else if(p4->data!=m)//节点后移
{
p3 = p4;
p4 = p4->next;
}
else if(p4->data==m)//对于除了头节点外数据的操作
{p3->next = p4->next;
free(p4);
break;
}
}
for(p5=head;p5!=NULL;p5=p5->next)
printf("&&%d**\n", p5->data);
node* p6,*p7,*p8;
p6 = (struct node*)malloc(sizeof(struct node));
p8 = head;
p7 = head->next;
printf("请输入要插入的数据:");
scanf("%d", &p6->data);
while (1)
{
if ((p6->data) > (p8->data) && (p6->data) < (p7->data))//腰部
{
p8->next = p6;
p6->next = p7;
break;
}
else if (p6->data < p8->data)//头部
{
p6->next = p8;
head = p6;
break;
}
else if(p6->data>p8->data&&p7->next==NULL)//尾部
{
p7->next = p6;
p6->next = NULL;
break;
}
else //都不符合,下一组
{
p8 = p7;
p7 = p7->next;
}
}
for (head; head != NULL; head = head->next)//输出
printf("%d\n", head->data);
return 0;
}