C中动态链表的添加,删除

#include<stdio.h>
#include<stdlib.h>

typedef struct node
{ 
  int data;
  struct node *next;
}list,*lplist;

lplist createlist()        //创建一个表头,表头没有数据,只有一个指针域
{
 lplist head=(lplist)malloc(sizeof(list));
 head->next=nullptr;
 return head;
}

lplist createnode(int data)//创建一个结点,包含数据域和指针域
{
 lplist newnode=(lplist)malloc(sizeof(list));
 newnode->data=data;
 newnode->next=nullptr;
 return newnode;
}
void insertnodebylist(lplist list,int data)  //从头部插入指针
{
 lplist newnode=createnode(data);
 newnode->next=list->next;
 list->next=newnode;
}
void insertnodebytail(lplist list,int data)  //从尾部插入指针
{
 lplist newnode=createnode(data);
 lplist p=list;
 while(p->next!=nullptr)//指针从头往尾扫,扫到值为空,添加数据
 {
  p=p->next;
 }
 if(p->next==nullptr)
 p->next=newnode;
 printf("\n");
}
void deletenodebyappoin(lplist list,int posdata) //通过指定位置删除数据
{
 lplist p=list;
 lplist q=list->next;
 if(q==nullptr)
 {
  printf("指定的位置没有数据,无法删除");
  system("pause");
  return;
 }
 else
 {
  while(q->data!=posdata)
  {
    p=q;
	q=p->next;
   if(q==nullptr)
   {
   printf("未找到指定位置");
   }
  }
  p->next=q->next;
  free(q);
 }
 printf("\n");
}

void printlist(lplist list)
{
 lplist p=list->next;
 while(p)
 {
  printf("%d->",p->data);
  p=p->next;
 }
}
int main()
{lplist list= createlist();
 insertnodebylist(list,1); 
 insertnodebylist(list,2); 
 insertnodebylist(list,3); 
 printlist(list);
 printf("\n");

 insertnodebytail(list,0);   
 printlist(list);
 printf("\n");

 deletenodebyappoin(list,2);
 printlist(list);

 system("pause");
 return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值