寻找单链表的倒数第四个节点
来源:互联网 发布:交通枢纽大数据 编辑:程序博客网 时间:2024/05/18 01:54
/*快慢指针。先让快指针先走4步,找到第四个结点。然后让快慢指针同时走,每次一步。当快指针走到最后一个结点时,两个指针再同时走一步,慢指针指向倒数第4个元素。*/ #include <iostream>#include <string>using namespace std; //使用命名空间 struct node //定义一个结构体 {char val; //定义一个字符型变量 struct node * next; //定义一个结构体指针 };typedef struct node NODE; //为结构体类型重新创建一个名称 typedef NODE * Link; //为结构体指针重新创建一个名称 /*遍历整个链表*/void out_link(Link pHead){if(!pHead) //入口参数检查 return ; Link temp = pHead->next; //定义一个临时指针,指向头指针下一个,方便下一次遍历 while(temp) //如果temp指针到最后指向NULL后,即跳出循环 { cout<<temp->val; //输出该指针指向的节点的数值 temp = temp->next; //指针指向下一个 }cout<<endl;}/*寻找倒数第四个节点的字符*/Link find_fourth_node(Link pHead){if(!pHead)return NULL ;Link pFast = pHead; //快指针 Link pSlow = pHead; //慢指针 int num = 4; //快指针先走四步 while(num--){pFast = pFast->next;if(!pFast) //快指针还未走完,就结数了 {return NULL; //返回0地址 break; //跳出循环 }}while(pFast) //让快指针走到链表的最后一个 {pFast = pFast->next; //快指针和慢指针同时走 pSlow = pSlow->next; }return pSlow; //返回慢指针所在位置 } /*创建一个链表,传入一个字符串*/ Link create(string & str_link) {int len = str_link.length(); //计算出这个字符串的长度 Link pHead = new node(); //用new运算符在堆上分配一个结构体的大小的节点 pHead->next = NULL; //头节点里面的结构体指针指向NULL Link preNode = pHead; //定义一个结构体指针指向要插入节点的前一个 for(int i=0;i<len;i++) //实现字符串中的字符循环插入 {Link pNode = new node(); //在堆上分配一个新的节点 pNode->val = str_link[i]; //插入字符 pNode->next = NULL; //将新分配的节点中的结构体指针指向NULL preNode->next = pNode; //实现新的节点实现尾插preNode = pNode; //将preNode指针指向该链表的最后一个 }return pHead; //返回链表头指针指向的位置 }void test(){string str;cout<<"输入一个字符串:\n";cin>>str;Link pHead = create(str); //创建一个链表,将字符串中的每个字符分配到每个节点,返回头指针的位置out_link(pHead); //遍历整个链表 Link pNode = find_fourth_node(pHead) ; //寻找倒数第四个节点的字符 if(pNode)cout<<"倒数第四个节点的字符为"<<pNode->val<<endl; elseprintf("该链表的节点个数不足四个!\n");} int main(int argc,char **argv){test(); //测试输出倒数第四个节点的字符 return 0; }
阅读全文
0 0
- 寻找单链表的倒数第四个节点
- 寻找单链表的倒数第N个节点
- 寻找链表的倒数第k个节点
- 寻找单向链表的倒数第k个节点
- 寻找链表的倒数第K个节点
- 寻找链表的倒数第N个节点
- 【经典面试题】寻找单链表倒数第n个节点
- 寻找倒数第K个节点...
- 寻找倒数第K个节点...
- 求链表倒数第四个元素
- 【C语言】单链表的相关热点面试题(包括:从尾到头打印,逆置,冒泡,寻找中间节点,倒数k节点)
- 单链表的倒数第K个节点
- 寻找单链表的中间节点
- 寻找单链表的中间节点
- offer面试题二-----寻找链表的倒数第K个节点
- 【经典面试题】寻找单链表倒数第n个节点_C/C++
- 经典面试题】寻找单链表倒数第n个节点_C/C++
- 寻找第四个出现了两次或者两次以上的字符串
- 逃离焦油坑的伟大尝试——《人月神话》推荐
- 定义函数
- 机器学习应用——sklearn自带数据集训练(支持向量机分类)
- 【贪心+优先队列 / 并查集】【cofun1025】工作安排
- sqlmap 简单操作与数据库账户密码破解
- 寻找单链表的倒数第四个节点
- HDU
- JSTL(第二节)
- WampSever 64 虚拟站点的构建
- hdu 4436 后缀自动机算和
- 经典算法题1:找出数组中只出现一次的数字,其它数字都出现了两次
- leetcode解题方案--016--3 sum closest
- httpclient封装别人接口
- y的值