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;
}

猜你喜欢

转载自blog.csdn.net/qq_18671205/article/details/89602997