会创建链表之后,添加与删除节点的操作就十分简单
这是我的程序与思路:
#include<stdio.h>
struct node
{
int num;
node *next;
};
node *create()
{
node *p1,*p2,*head;
head=p2=p1=new node;
scanf("%d",&p1->num);
while(p1->num!=0)
{
p1=new node;
scanf("%d",&p1->num);
p2->next=p1;
p2=p1;
}
p2->next=NULL;
return head;
}
void disp(node *head)
{
node *p=head;
while(p->next!=NULL)
{
if(p->num!=0)
printf("%d ",p->num);
p=p->next;
}
if(p->num!=0)
printf("%d\n",p->num);
printf("\n");
}
node *insert(node *head)
{
node *p=head;//保存head节点
node *newnode = new node;//生成新节点
scanf("%d",&newnode->num);
newnode->next=NULL;//新节点的next域为空,这样安全
if(p->num>newnode->num)//判断插入元素是否第一个
{
printf("插入的节点应该放在第一个上面\n");
newnode->next=p;//保存后续节点
head=newnode;//更新head的值
}
else//其他位置
{
bool flag=false;
p=head;//保存头指针
while(p->next!=NULL)
{
if(p->next->num>newnode->num)
{
printf("插入的是中间位置\n");
newnode->next=p->next;
p->next=newnode;
flag=true;
break;
}
p=p->next;
}
if(flag==false)//如果插入最后节点
{
printf("插入的是最后的节点\n");
p->next=newnode;
}
}
return head;
}
node *del(node *head)
{
node *p=head;
int nume;
scanf("%d",&nume);
if(p->num==nume)
{
printf("删除第一个节点\n");
head=p->next;
delete p;
return head;
}
else
{
bool flag=false;
while(p->next->next!=NULL) / /如果只有一个next就无法找到上一个节点
{
if(p->next->num==nume)
{
printf("中间\n");
flag=true;
p->next=p->next->next;
break;
}
p=p->next;
}
if(flag==false) / /如果删除最后节点
{
printf("插入的是最后的节点\n");
p->next=NULL;
}
}
return head;
}
int main()
{
node *head=create();
disp(head);
node *head2=insert(head);
disp(head2);
node *head3=del(head);
disp(head3);
}
这样,链表的基本操作就结束了
数据结构与算法——链表节点的添加与删除
最新推荐文章于 2022-11-29 16:55:44 发布