【C语言】单链表的相关热点面试题(包括:从尾到头打印,逆置,冒泡,寻找中间节点,倒数k节点)

https://blog.csdn.net/hanjing_1995/article/details/51539599

  1. 从尾到头打印单链表

[cpp] view plaincopy
  1. void FromTailToHeadPrint(SListNode*& head)  
  2. {  
  3.     stack<SListNode*> s;  
  4.     SListNode* cur = head;  
  5.     while (cur)  
  6.     {  
  7.         s.push(cur);  
  8.         cur = cur->_next;  
  9.     }  
  10.   
  11.     while (!s.empty())  
  12.     {  
  13.         cout << s.top()->_data <<"->";  
  14.         s.pop();  
  15.     }  
  16.     cout << ""<<endl;  
  17. }  



2.除一个无头单链表的非尾节点

[cpp] view plaincopy
  1. void Erase(SListNode*& head,SListNode* pos)  
  2. {  
  3.     //分情况:空节点、一个节点、两个节点、三个节点  
  4.     if (head == NULL || pos==NULL)  
  5.     {  
  6.         return;  
  7.     }  
  8.       
  9.     if (head == pos)  
  10.     {  
  11.         free(head);  
  12.         head = NULL;  
  13.         return;  
  14.     }  
  15.   
  16.     SListNode* cur = head;  
  17.     while (cur)  
  18.     {  
  19.         SListNode* next = cur->_next;  
  20.           
  21.         if (next == pos)  
  22.         {  
  23.             //若只有两个节点,pos=next,nextnext=NULL,cur->_next = nextnext;  
  24.             //(即使题设未说明删除非尾节点)依然可以删除成功。  
  25.             SListNode* nextnext = next->_next;  
  26.             cur->_next = nextnext;  
  27.             free(next);  
  28.             next = NULL;  
  29.         }  
  30.         cur = cur->_next;  
  31.     }  
  32. }  



3.逆置、反转单链表

[cpp] view plaincopy
  1. void Reverse(SListNode*& head)  
  2. {  
  3.     if (head == NULL)  
  4.     {  
  5.         return;  
  6.     }  
  7.     SListNode* cur = head;  
  8.     SListNode* next = NULL;  
  9.     while (cur)  
  10.     {  
  11.         SListNode* tmp = cur;  
  12.         cur = cur->_next;  
  13.         tmp->_next = next;  
  14.         next = tmp;  
  15.         head = tmp;  
  16.     }  
  17. }  



4.单链表冒泡排序

[cpp] view plaincopy
  1. void BubbleSort(SListNode*& head)  
  2. {  
  3.     //空节点或一个节点直接返回  
  4.     if (head == NULL || head->_next == NULL)  
  5.     {  
  6.         return;  
  7.     }  
  8.       
  9.     SListNode* begin = head;  
  10.     SListNode* cur = head;  
  11.   
  12.     while (begin->_next)  
  13.     {          
  14.         while (cur->_next)  
  15.         {  
  16.             if (cur->_data > cur->_next->_data)  
  17.             {  
  18.                 swap(cur->_data, cur->_next->_data);  
  19.             }  
  20.             cur = cur->_next;  
  21.         }  
  22.         begin = begin->_next;  
  23.     }  
  24. }  



5.查找单链表的中间节点,要求只能遍历一次链表

[cpp] view plaincopy
  1. SListNode* FindMiddle(SListNode*& head)  
  2. {  
  3.     if (head == NULL)  
  4.     {  
  5.         return NULL;  
  6.     }  
  7.     SListNode* slow = head;  
  8.     SListNode* fast = head;  
  9.   
  10.     while (fast->_next)  
  11.     {  
  12.         if (fast->_next)  
  13.         {  
  14.             fast = fast->_next;  
  15.             if (fast->_next)  
  16.             {  
  17.                 fast = fast->_next;  
  18.             }  
  19.             else  
  20.             {  
  21.                 return slow;  
  22.             }  
  23.             slow = slow->_next;  
  24.         }  
  25.         else  
  26.         {  
  27.             return NULL;  
  28.         }  
  29.     }  
  30.       
  31.     return slow;  
  32. }  



6.查找单链表的倒数第k个节点,要求只能遍历一次链表

[cpp] view plaincopy
  1. SListNode* FindLastK(SListNode*& head,int k)  
  2. {  
  3.     assert(k > 0);  
  4.     if (head == NULL)  
  5.     {  
  6.         return NULL;  
  7.     }  
  8.     SListNode* slow = head;  
  9.     SListNode* fast = head;  
  10.     while (k--)  
  11.     {  
  12.         if (fast->_next)  
  13.         {  
  14.             fast = fast->_next;  
  15.         }  
  16.         else  
  17.         {  
  18.             return NULL;  
  19.         }  
  20.     }  
  21.     slow = slow->_next;  
  22.     while (fast->_next)  
  23.     {  
  24.         fast = fast->_next;  
  25.         slow = slow->_next;  
  26.     }  
  27.     return slow;  
  28. }  


本文出自 “Han Jing's Blog” 博客,请务必保留此出处http://10740184.blog.51cto.com/10730184/1772313



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux命令【二】终端+Vim

需要先安装net-tools ifconfig eth0 网卡&#xff0c;硬件地址为MAC 地址&#xff0c;网卡编号&#xff0c;绝对不会重复 lo 回环地址 测试两台主机之间能否通信&#xff1a;ping IP或域名 [-c 4//回馈四条信息 -i//每隔多少秒回馈一次] 得到域名对应的IPnslookup 域名得到域…

Linux如何将文件中内容放到粘贴板上

没有找到如何在vim中将内容复制到粘贴板上&#xff0c;只找到了使用另一个软件进行操作。 首先安装xsel sudo apt-get install xsel # 将剪切板中的内容输出到文件 echo $(xsel --clipboard) >> a.txt# 将文件的内容复制到剪切板 cat a.txt | xsel --clipboard

【C语言】str类与men库函数的实现(如:strcpy,strcmp,strstr,strcat,memmove,memcpy)

https://blog.csdn.net/hanjing_1995/article/details/51539583strcpy拷贝源字符串到子字符串&#xff0c;包括‘\0’。代码实现&#xff1a;[cpp] view plaincopychar* strcpy(char* dst,const char* src) { assert(src); char* ret dst; while (*src) …

【笔试常考】C语言:深度剖析strlen,sizeof

https://blog.csdn.net/hanjing_1995/article/details/51539532在之前的博客中&#xff0c;我也探索过strlen,sizeof区别&#xff0c;详情可见博客http://10740184.blog.51cto.com/10730184/1705820。关于strlen,sizeof均可求字符串长度&#xff0c;这两者是笔试面试常考的知识…

vim环境配置 +vimplus配置

vim配置 参考网站&#xff1a;传送门 这个网站详细说明了vim配置的命令&#xff0c;我挑选了我想要用的部分&#xff0c;自己配置了一下。 配置vim的文件有两个&#xff0c;一个是/etc/vim/vimrc 这个是系统配置文件&#xff0c;修改这个文件将会修改所有用户的vim环境&…

剑指offer面试题:替换空格

https://blog.csdn.net/yanxiaolx/article/details/52235212题目&#xff1a;请实现一个函数&#xff0c;把字符串中的每个空格替换成“%20”。例如输入“We are happy.”&#xff0c;则输出“We%20are%20happy.”。解析&#xff1a;时间复杂度为O(n)的解法。完整代码及测试用例…

数据库原理及应用【一】引言

什么是数据库&#xff1a;一个大规模的集成的数据集合 作用&#xff1a;描述现实世界的实体(entities)以及实体之间的关系 管理数据库的系统软件&#xff1a;DBMS 文件是一个平滑的字符流&#xff0c;无法完成信息的检索和管理 数据&#xff08;data&#xff09;:用来描述现…

Linux命令【三】gcc编译+静态库+动态库+makefile+gdb调试

用C编译器编译源文件&#xff1a;gcc 源文件 -o 可执行文件名 详细步骤&#xff1a; gcc -E a.c -o a.i预处理器将头文件展开&#xff0c;宏替换&#xff0c;去掉注释gcc -S a.i -o a.s编译器将C文件变成汇编文件gcc -c a.s -o a.o汇编器将会变文件变成二进制文件gcc a.o -o a…

用c++模拟实现一个学生成绩管理系统

https://blog.csdn.net/yanxiaolx/article/details/53393437题目&#xff1a;用c模拟实现一个学生成绩的信息管理系统&#xff0c;要求能添加、删除、修改、查看和保存学生的信息等功能 源代码如下:[cpp] view plaincopy#define _CRT_SECURE_NO_WARNINGS #include<iostr…

Linux命令【四】文件+虚拟内存+常用系统函数

File*其实是一个结构体 文件描述符FD&#xff1a;索引到对应的磁盘文件文件读写位置指针FP_POS&#xff0c;如果同时读写需要注意文件指针的位置I/O缓冲区BUFFER&#xff1a;保存内存指针&#xff0c;默认大小是8kb&#xff0c;用于减小我们对硬盘操作的次数。因为我们对硬盘的…

Python3列表

操作&#xff1a;索引、切片、加、乘、检查成员、确定序列长度、确定最大最小元素 定义&#xff1a; 列表名 [元素]下标列表名[x] 截取:列表名[x:y] 更新&#xff1a; list[x]y 或者使用append()方法添加列表项删除&#xff1a; del list[x]常用操作&#xff1a; 截取与…

Linux惊群效应详解(最详细的了吧)

https://blog.csdn.net/lyztyycode/article/details/78648798?locationNum6&fps1 linux惊群效应详细的介绍什么是惊群&#xff0c;惊群在线程和进程中的具体表现&#xff0c;惊群的系统消耗和惊群的处理方法。1、惊群效应是什么&#xff1f;惊群效应也有人叫做雷鸣群体效应…

epoll原理详解(最清晰)

https://blog.csdn.net/lyztyycode/article/details/79491419我只是把内容搬运过来做个记录&#xff0c;方便自己以后回头看。第一部分&#xff1a;select和epoll的任务关键词&#xff1a;应用程序 文件句柄 用户态 内核态 监控者要比较epoll相比较select高效在什么地方&#x…

Linux命令【五】系统函数

系统文件函数 stat函数 指针如果没有const一般表示传出参数&#xff0c;如果加const表示传入参数 struct stat dev_t st_dev文件设备编号ino_t st_ino节点 inode号是唯一的&#xff0c;每个inode节点的大小一般是128字节活着256字节&#xff0c;一般文件每2KB就设置一个ino…

生产者-消费者模型的两种实现方式

https://www.cnblogs.com/caolicangzhu/p/7086176.html本文主要来总结生产者-消费者模型的代码实现,至于其原理,请大家自行百度. 一、基于链表的生产-消费模型(条件变量)我们以链表为例,生产者进行头部插入,消费者进行头部删除,因此,先将链表相关操作封装为LinkList.h,具体代码…

Linux系统【一】CPU+MMU+fork函数创建进程

切板中的内容输出到文件### 进程相关概念 程序&#xff1a;编译好的二进制文件&#xff0c;在磁盘上&#xff0c;不占用系统资源&#xff08;不包括磁盘&#xff09;。&#xff08;剧本&#xff09; 进程&#xff1a;占用系统资源&#xff0c;是程序的一次运行。&#xff08;戏…

Ubuntu卸载软件

用过使用dpkg软件管理工具得到所有已经安装的软件&#xff0c;如果不清楚软件的全名可以使用grep命令进行查找 然后再使用sudo apt-get remove --purge 软件名卸载软件&#xff08;--purge参数会删除配置文件&#xff0c;删的干净一些&#xff09; 例如&#xff1a;

一个重要且实用的signal---SIGCHLD

https://blog.csdn.net/lyztyycode/article/details/78150805SIGCHLD(修改)因为笔者之前的文章里面有错误&#xff0c;今天发现&#xff0c;立马做个修改。在下面我的一段关于sigchld信号相对于直接调用wait函数的好处时&#xff0c;我说调用wait函数要一直检测子进程是否执行完…

数据结构实验之链表七:单链表中重复元素的删除

https://blog.csdn.net/blessingxry/article/details/794455111.知识点&#xff1a;逆序建立链表&#xff0b;节点删除 2.题意&#xff1a;按照数据输入的相反顺序&#xff08;逆位序&#xff09;建立一个单链表&#xff0c;并将单链表中重复的元素删除&#xff08;值相同的元素…

Python3函数和代码复用

函数的定义 def 函数名([参数列表]):注释函数体注意事项 函数形参不需要声明类型&#xff0c;可以使用return语句在结束函数执行的同时返回任意类型的值&#xff0c;函数返回值类型与return语句返回表达式i的类型一致 即使该函数不需要接受任何参数&#xff0c;也必须保留一堆…