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->next=nullptr;
 newnode->data=data;
 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;
 }
 p->next=newnode;
}
void deletenodebylist(lplist list,int posdata)//删除指定结点
{lplist p=list;
 lplist q=list->next;
 if(q==nullptr)
 printf("此表为空");
  while(q->data!=posdata)
  {p=q;
   q=p->next;
  }
  if(q->next==nullptr)
  printf("未找到指定数据");
  if(q->data==posdata)
  p->next=q->next;
}
void addnodebylist(lplist list,int pos,int posdata)//添加指定结点
{ 
  lplist newnode=createnode(posdata);
  lplist p=list;
  lplist q=list->next;
 
  if(q->next==nullptr)
  printf("此为空表");
  while(q->data!=pos)
  {
   p=q;
   q=p->next;
  }
  if(q->data==pos)
  {  newnode->next=q;
     p->next=newnode; 
  }
}
void printlist(lplist list)       //打印链表
{
 lplist p=list->next;
 while(p)
 {
 printf("%d->",p->data);
 p=p->next;
 }
}
int main()
{lplist list=createlist();
 printf("创建1-7的链表,从链表头部依次添加:\n");
 insertnodebylist(list,1);
 insertnodebylist(list,2);
 insertnodebylist(list,3);
 insertnodebylist(list,4);
 insertnodebylist(list,5);
 insertnodebylist(list,6);
 insertnodebylist(list,7);
 printlist(list);
 printf("\n\n");
 
 printf("在链表末尾添加一个0:\n");
 insertnodebytail(list,0);
 printlist(list);
 printf("\n\n");

 printf("删除链表指定位置数据域为6的结点:\n");
 deletenodebylist(list,6);
 printlist(list);
 printf("\n\n");

 printf("在链表指定位置3之前,添加数据域为9结点:\n");
 addnodebylist(list,3,9);
 printlist(list);
 printf("\n\n");

 system("pause");
 return 0;
}

猜你喜欢

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