C++实现单链表删除倒数第k个节点的方法
2019/7/10 22:47:59
本文主要是介绍C++实现单链表删除倒数第k个节点的方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文实例讲述了C++实现单链表删除倒数第k个节点的方法。分享给大家供大家参考,具体如下:
题目:
删除单链表中倒数第k个节点
解题思路及算法代码:
标尺法,定义两个指针指向链表头结点,先让一个走k步,然后两个指针同时开始走,当先走的指针走到末尾时,后走的指针指向的结点就是需要删除的结点。
单链表结构定义:
typedef struct Node { int data; struct Node* next; }node, *pLinkedList;
删除倒数第K结点操作代码:
//head表示头结点 Node* removeLastKthNode(pLinkedList head, int k) { if (NULL == head->next || k < 1) return head; pLinkedList cur = head; //1号指针 pLinkedList ret = head; //2号指针,指向待删除节点 pLinkedList pre = NULL; //pdel待删除节点的前一个节点 /* head 1 2 3 4 5 cur ret */ while (k > 0 && cur != NULL) { k--; cur = cur->next; } //当链表走到终点时,k仍然大于0,可知k值大于链表长度 if (k > 0 && cur == NULL) { cout << "k值大于链表长度" << endl; return head; } //k == 0时,1号指针和2号指针同时走,ret即为待删除的节点 if (k == 0) { while (cur != NULL) { pre = ret; cur = cur->next; ret = ret->next; } /*k = 2时 head 1 2 3 4 5 NULL pre ret cur 即要求删除ret节点 */ pre->next = ret->next; free(ret); ret = NULL; return head; } }
希望本文所述对大家C++程序设计有所帮助。
这篇关于C++实现单链表删除倒数第k个节点的方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15PingCAP 黄东旭参与 CCF 秀湖会议,共探开源教育未来
- 2024-05-13PingCAP 戴涛:构建面向未来的金融核心系统
- 2024-05-09flutter3.x_macos桌面os实战
- 2024-05-09Rust中的并发性:Sync 和 Send Traits
- 2024-05-08使用Ollama和OpenWebUI在CPU上玩转Meta Llama3-8B
- 2024-05-08完工标准(DoD)与验收条件(AC)究竟有什么不同?
- 2024-05-084万 star 的 NocoDB 在 sealos 上一键起,轻松把数据库编程智能表格
- 2024-05-08Mac 版Stable Diffusion WebUI的安装
- 2024-05-08解锁CodeGeeX智能问答中3项独有的隐藏技能
- 2024-05-08RAG算法优化+新增代码仓库支持,CodeGeeX的@repo功能效果提升