C++删除单链表值为K的结点空间复杂度O(1)
2017-08-11 14:40
246 查看
#include <iostream> struct Node { int value; Node *next; Node(int data) : value(data), next(nullptr) {}; }; void print(Node * head); Node * delKValueNode(Node * head, int k); int main() { Node n1(1); Node n2(2); Node n3(3); Node n4(1); Node n5(9); Node n6(1); Node n7(2); Node n8(7); n1.next = &n2; n2.next = &n3; n3.next = &n4; n4.next = &n5; n5.next = &n6; n6.next = &n7; n7.next = &n8; print(delKValueNode(&n1, 7)); system("pause"); return 0; } void print(Node *head) //打印函数 { Node *cur = head; while (cur != nullptr) { std::cout << cur->value << std::endl; cur = cur->next; } } Node * delKValueNode(Node * head, int k) //删除值为k的结点 { if (head == nullptr) { return head; } Node *cur = head, *newHead = nullptr; while (cur != nullptr) //寻找新的头结点 { if (cur->value != k) { newHead = cur; break; } cur = cur = cur->next; } cur = newHead; Node *pre = newHead; while (cur != nullptr) //删除操作 { if (cur->value == k) { pre->next = cur->next; cur = pre->next; } else { pre = cur; cur = cur->next; } } return newHead; }
相关文章推荐
- C++将单链表的每K个结点之间逆序改进版空间复杂度O(1)
- c++删除单链表指定值结点
- 链表之无头指针删除单链表指定结点
- 长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为X的元素
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- [算法]在单链表和双链表中删除倒数第k个结点
- 8、一个单链表,不给头指针,只给出当前结点,删除该结点。
- 【数据结构】单链表—在O(1)时间删除链表结点
- 在O(1)时间删除单链表结点
- 2.4删除单链表L中一个最小值结点的高校算法(假设最小值结点是唯一的)
- 【算法】删除单链表的倒数第N个结点
- C++实现单链表(含头结点)
- 实现一个算法,删除单链表中间的某个结点,假定你只能访问该结点
- 磁盘空间占满inode结点没用完 并删除了文件但是释放不了
- 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法
- 372. 在O(1)时间复杂度删除链表节点 (delete-node-in-the-middle-of-singly-linked-list)(c++)----lintcode面试题之链表
- 链表面试题(六)---删除单链表倒数第k个结点
- 删除单链表某个结点
- 《剑指offer》面试题57 删除链表中重复的结点 C++ 实现 以及 错误总结 (指针问题)!!
- [算法浅析] 如何在O(1)的时间里删除单链表的结点