您的位置:首页 > 编程语言 > C语言/C++

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++语言 链表 删除
相关文章推荐