栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

单链表逆置、删除等简单操作

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单链表逆置、删除等简单操作

建立在上一篇文章 能够构建简单单链表的基础上的简单进阶篇

void reve(link *p)//将单链表逆置,要求不改变结点地址
{link *r=0,*q=0,*s=0;//通过头插法进行单链表的逆置
 r=p->next;
 q=r->next;
 s=q->next;
 r->next=NULL;
while(s!=0)
 {q->next=p->next;
 p->next=q;
 q=s;
 s=s->next;}
 q->next=p->next;
 p->next=q;
}

对于单链表的逆置是非常常见的一类问题,通常可以通过头插法进行循环,轻松的将指针依次变向。

void favg(link *p)//寻找单链表的中节点
{
  link *r=p;
  int i=1,j=1;
  while(r->next!=0)
  {
    r=r->next;
    i++;
  }
  r=p;
  if(i%2!=0)
  {while(j<=(i-1)/2)
  {
    r=r->next;
    j++;
  }
  printf("该单链数据表节点数为奇数,中节点为:%d",r->data);
  }
  else
  {
    while(j<=i/2)
  {
    r=r->next;
    j++;
  }
  printf("该单链数据表节点数为偶数,中节点为:%d,%d",r->data,r->next->data);
  }
}

对于单链表中节点,由于重新写的一个函数,需要对单链表遍历一次,数出总的节点数,然后分奇偶情况,再对单链表进行半遍历,输出中节点数据。

void fbackk(link *p,int k)//找单链表倒数第K个点
{
   link *r=p;
  int i=1,j=1;
  while(r->next!=0)
  {
    r=r->next;
    i++;
  }
  r=p;
  for(j;j<=(i-k);j++)
  {
    r=r->next;
  }
  printf("单链表倒数第%d节点的值为:%d",k,r->data);
}

 

void delbackk(link *p,int k)//删除单链表倒数第k个点
{
    link *r=p,*m=0,*n=0;
  int i=1,j=1;
  while(r->next!=0)
  {
    r=r->next;
    i++;
  }
  r=p;
  for(j;j<(i-k);j++)
  {
    r=r->next;
  }
  m=r->next;
  n=m->next;
  r->next=n;
}

删除倒数第k个节点数据。

int main()
{ link *L1;
  int i,k;
  printf("请输入单链表一的长度i:");
  scanf("%d",&i);
  printf("n");
  L1=start(L1);
  printf("构建单链表L1n");
  create(L1,i);
  print(L1); 
  reve(L1);
  printf("n逆置后n");
  print(L1); 
  printf("n");
  favg(L1);
  printf("n");
  printf("你要查找倒数第几个节点的数?n");
  scanf("%d",&k);
  fbackk(L1,k);
  printf("n");
  delbackk(L1,k);
  printf("删除倒数第%d个节点后n",k);
  print(L1);
   return 0;
}

 最终代码运行结果(包括第一篇文章的部分代码)

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832832.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号