单链表的节点删除,基础讲解及习题练习

单链表的删除常用两种方法:

1.删除p->next的节点

 

{  q=p->next;  
   p->next=q->next;
   free(q);
}

2.删除p指向的节点(需要引入前驱节点q)

{  q=head;
   while(q->next!=p) q=q->next;
   q->next=p->next;
   free(p);
}

常采用第一种删除方式,现在展示删除p->next节点的自定义函数

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define null 0

typedef struct linknode{  //定义单链表
    int data;
    struct linknode *next;
}node;

node* head,* p,* q,* s;

viod creat()  //创建单链表
{
   head=(node*)malloc(sizeof(node));
   p=head;
   srand((int)time(0));
   for(int i = 0; i < 10: i++){  // 长度为10
      q = (node*)malloc(sizeof(node));
      q->data = rand()%10 + 1;   // 节点为1-10的随机数
      p->next = q ;
      p = q;
  }q->next = null;
}

void delete()  //删除p->next节点的自定义函数
{
   q=p->next;
   p->next=q->next;
   free(q);
}

print()  //打印链表
{
   p=head->next;
   while(p){
    printf("%d\n",p->data);
    p=p->next;
   }
}

int main()
{
  int x;
  creat();
  print();  //打印删除前链表
  printf("请输入删除节点x:");
  p=head;
  while(p){
    if(p->next->data==x) break;
    p=p->next;
  }delete();
  puts("after");
  print();   //打印删除后链表
  return 0;
}
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值