单链表经典问题3_void deletesame(list &l){ i=1; len=listlength(l); -程序员宅基地

技术标签: 链表  数据结构  

单链表中节点类型定义如下:

typedef struct link {
    
 int data;
 link* next;
}node,*linklist;

1.试编写在带头节点的单链表L中删除一个最小值节点的高效算法(假设最小值节点时唯一的)

void delete_MinX(linklist& L) {
    
//试编写在带头节点的单链表L中删除一个最小值节点的高效算法(假设最小值节点时唯一的)
 node* min_pre = L;//记录最小节点的前一个节点
 node* min_p=L->next;//用于指向最小值节点
 node* pre=L;//记录遍历时节点的前一个节点
 node* p = L->next;
 while (p != NULL){
    
  if (p->data <min_p->data) {
    
   min_pre = pre;
   min_p = p;
  }
  pre = pre->next;
  p = p->next;
 }
 min_pre->next = min_p->next;
 cout << min_p->data<<endl;
}

2.设在一个带头节点的单链表中所有元素节点的数据值无序,试编写一个函数,删除表中所有介于给定的两个值(作为函数参数给出)之间的元素的元素

void delete_between(linklist& L, int x, int y) {
    
//设在一个带头节点的单链表中所有元素节点的数据值无序,试编写一个函数,
//删除表中所有介于给定的两个值(作为函数参数给出)之间的元素的元素
 node* pre = L;
 node* p = L->next;
 while (p != NULL) {
    
  if (p->data <= y && p->data >= x) {
    
   pre->next = p->next;
   p = p->next;
   //free(p);
  }
  else {
    
   pre = p;
   p = p->next;
  }
 }
}

3.有一个带头节点的单链表L,设计一个算法使其元素递增有序

void sort(linklist& L) {
    
//有一个带头节点的单链表L,设计一个算法使其元素递增有序
 //方法1:断链,逐个插入法;
 if (L->next == NULL) {
    
  return;
 }
 node* p = L->next;
 node* rear = p->next;
 p->next = NULL;//断链,让其只剩下一个节点,最后采用插入法;
 p = rear;
 while (p != NULL) {
    
  rear = p->next;
  node* q_pre = L;//指向被插入位置的前一个节点
  node* q = L->next;
  while (q != NULL&&q->data<p->data) {
    
   q_pre = q;
   q = q->next;
  }
  p->next = q_pre->next;
  q_pre->next = p;
  p = rear;
 }
 //方法2:交换元素值
 /*int length = 0;
 node* p = L->next;
 while (p != NULL) {
  length++;
  p = p->next;
 }
 if (length <= 1) {
  return;
 }
 node* pre = L->next;;
 p = pre->next;
 int t = 1;
 while (t < length) {
  int tt = 0;
  pre = L->next;
  p = pre->next;
  while (tt < length - t) {
   if (pre->data > p->data) {
    int exchange = pre->data;
    pre->data = p->data;
    p->data = exchange;
   }
   pre = p;
   p = p->next;
   tt++;
  }
  t++;
 }*/
}

4.给定两个单链表,编写算法找出两个链表的公共节点。

linklist Common(linklist A, linklist B) {
    
//给定两个单链表,编写算法找出两个链表的公共节点。
//算法思路:先走K步,然后一同走;
 int length1 = 0;
 int length2 = 0;
 node* p = A->next;
 node* q = B->next;
 while (p != NULL) {
    
  p = p->next;
  length1++;
 }
 while (q != NULL) {
    
  q = q->next;
  length2++;
 }
 int k;
 if (length1 >= length2) {
    
  k = length1 - length2;
  p = A->next;
  while (k > 0) {
    
   p = p->next;
   k--;
  }
  q = B->next;
 }
 else {
    
  k = length2 - length1;
  q = B->next;
  while (k > 0) {
    
   q = q->next;
   k--;
  }
  p = A->next;
 }
 while (p!=NULL&&q!=NULL&&p->data != q->data) {
    //同时走找公共节点
  p = p->next;
  q = q->next;
 }
 cout << p->data;
 if (p->data == q->data) {
    
  return p;
 }
 return NULL;
}

5.给定一个带表头节点的单链表,设head为头指针,试写出算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间

void fun1(linklist& head) {
    
//给定一个带表头节点的单链表,设head为头指针,试写出算法:
//按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间
//不允许数组作为辅助空间
 while (head->next != NULL) {
    
  node* min_pre = head;
  node* min_p = head->next;//设刚开始最小值就是第一个结点
  node* pre = head;
  node* p = head->next;
  while (p != NULL) {
    
      if (p->data < min_p->data) {
    
    min_p = p;
    min_pre = pre;
   }
   pre = p;
   p = p->next;
  }
  cout << min_p->data << endl;
  min_pre->next = min_p->next;
 }
}

6.将一个带头节点的单链表分成两个单链表,A存放奇数结点,B存放偶数结点
在这里插入图片描述

void fun2(linklist& L) {
    
//将一个带头节点的单链表分成两个单链表,A存放奇数结点,B存放偶数结点
 node* la = (node*)malloc(sizeof(node*));//创建链表A的头节点
 node* lb = (node*)malloc(sizeof(node*));//创建链表B的头节点
 la->next = NULL;
 lb->next = NULL;
 node* p = L->next;
 node* rear = la;
 int t = 1;
 while (p != NULL) {
    
  node* temp = p->next;
  if (t % 2 == 1) {
    //采用尾插法
   p->next = rear->next;
   rear->next = p;
   rear = p;
  }
  else {
    //采用头插法
   p->next = lb->next;
   lb->next = p;
  }
  t++;
  p = temp;
 }
 display(la);
 display(lb);
}

7.在一个递增有序的线性表中,有数值相同的元素存在,若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素

void delete_same(linklist& L) {
    
//在一个递增有序的线性表中,有数值相同的元素存在,若存储方式为单链表,
//设计算法去掉数值相同的元素,使表中不再有重复的元素
 node* pre = L->next;//指向大小相等的结点中的第一个结点
 if (pre == NULL) {
    
  return;
 }
 node* p = pre->next;
 while (p != NULL) {
    
  if (p->data == pre->data) {
    //说明中间有相同的元素
   p = p->next;
  }
  else {
    
   pre->next = p;
   pre = p;
   p = p->next;
  }
 }
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42168411/article/details/108514415

智能推荐

可狱可囚的爬虫系列课程 07:BeautifulSoup4(bs4)库的使用_beautifulsoup4库 获取br-程序员宅基地

文章浏览阅读1.5k次,点赞21次,收藏18次。BeautifulSoup4 属于 BeautifulSoup 系列的第四代版本,BeautifulSoup 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库,这个库能够实现树文档的导航、查找,从而帮助我们提取到网页中所需要的数据。。如果忘记了在哪里安装,请回看 Requests 模块第一篇文章。安装好以后,我们围绕数据提取这个话题对 BeautifulSoup4 进行剖析。"""# 问题一:使用标签选择器获取源代码中所有的 p 标签。_beautifulsoup4库 获取br

rpm包及作用_cannot install both libpng-2:1.5.13-8.el7.x86_64 a-程序员宅基地

文章浏览阅读1.9k次。基于Red Hat Enterprise Linux Server release 7.4 (Maipo)最小化安装将会慢慢补齐每个包的作用:1 bash-completion-2.1-6.el7.noarch https://cbs.centos.org/koji/rpminfo?rpmID=4260 2 grubby-8.28-23.el7.x86_64 ..._cannot install both libpng-2:1.5.13-8.el7.x86_64 and libpng-2:1.6.37-1.ky10.

vxworks的RTP学习_vxworks rtp-程序员宅基地

文章浏览阅读2.1k次。这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma..._vxworks rtp

用户层与驱动通信-程序员宅基地

文章浏览阅读185次。以进行加法和减法为例,用户层将要进行的操作码和参数,返回缓冲发给驱动,驱动进行处理并将结果写到返回缓冲中driver.c//_stdcall#include<ntddk.h>#include<ntstrsafe.h>#pragma code_seg("INT")#define SynLinkName L"\\??\\freesec_tx..._pirpstack->majorfunction

Android Framework 分析-程序员宅基地

文章浏览阅读91次。http://raymond1860.spaces.live.com/Blog/cns!BF47B6FD104579C9!797.entry1.目录树/framework/base/api/framework/base/awt/framework/base/build/framework/base/camera关 于camera的HAL接口库。最终生成native共享库l..._android framework cmds 开发

springboot+mysql互联网互联网美食分享平台源码53102-程序员宅基地

文章浏览阅读82次。免费领取项目源码,请关注●点赞收藏并私信博主,谢谢-、互联网美食分享平台采用Java技术,Mysql数据库存储数据,基于Springboot框架开发。系统采用了模块化设计方法,根据用户的需求开发功能模块,方便了程序扩展维护,以便后期的更新。整个开发过程首先对系统进行需求分析,得出系统主要功能模块。接着对系统进行总体设计和详细设计。最后对系统进行了功能测试,并对测试结果进行了分析总结,得出系统的不足及需要改进的地方,为以后的系统维护提供了方便,同时也为以后开发类似系统提供了借鉴和帮助。

随便推点

E - Mafia CodeForces - 348A 【二分】_348a二分-程序员宅基地

文章浏览阅读317次。E - Mafia CodeForces - 348A 【二分】One day n friends gathered together to play “Mafia”. During each round of the game some player must be the supervisor and other n - 1 people take part in the game. Fo..._348a二分

四元数和旋转矩阵_四元数 旋转矩阵-程序员宅基地

文章浏览阅读1.6w次。四元数和旋转矩阵Quaternion(四元数)Quaternion 的定义四元数一般定义如下: q=w+xi+yj+zk其中 w,x,y,z是实数。同时,有: i*i=-1 j*j=-1 k*k=-1四元数也可以表示为: q=[w,v]其中v=(x,y,z)是矢量,w是标量,虽然v是矢量,但不能简_四元数 旋转矩阵

WebComponents.exe未安装的解决办法-程序员宅基地

文章浏览阅读5.8w次,点赞6次,收藏3次。很多人在使用海康威视的开发包的时候,都会遇到下面几个问题在安装WebComponents.exe之后 浏览器在运行的时候提示WebComponents.exe为安装 或者是WebComponents.exe不是最新版本开发包提供的版本如下,浏览器自动安装的版本为3.0.5.34这2个版本都是是可以使用的 ,而且不需要更新那么问题就在浏览器了_webcomponents.exe

集成测试与系统测试_集成测试是系统测试吗-程序员宅基地

文章浏览阅读1.4w次,点赞5次,收藏42次。 集成测试与系统测试_集成测试是系统测试吗

Jenkins中文官网地址_jenkins官网-程序员宅基地

文章浏览阅读792次,点赞9次,收藏8次。Jenkins 是一个开源自动化服务器。Jenkins 用户手册。_jenkins官网

nginx 网页匹配跳转(rewrite、location)_nginx location直接指向某个网页-程序员宅基地

文章浏览阅读1.7k次,点赞29次,收藏23次。location,rewrite基于:域名、客户端ip、旧域名、参数匹配,跳转_nginx location直接指向某个网页

推荐文章

热门文章

相关标签