c语言删除单向链表偶数节点,从C ++中的双链表中删除所有偶数节点

在本教程中,我们将学习如何从双向链表中删除所有主要节点。

让我们看看解决问题的步骤。用数据,上一个和下一个指针写struct。

编写一个函数,将节点插入到双向链表中。

用伪数据初始化双链表。

遍历双向链表。查找当前节点数据是否为偶数。

如果当前数据为偶数,则删除该节点。

编写一个删除节点的函数。删除节点时,请考虑以下三种情况。如果该节点是头节点,则将头移到下一个节点。

如果该节点是中间节点,则将下一个节点链接到上一个节点

如果该节点是结束节点,则删除上一个节点链接。

示例

让我们看一下代码。

#include 

using namespace std;

struct Node {

int data;

Node *prev, *next;

};

void insertNode(Node** head_ref, int new_data) {

Node* new_node = (Node*)malloc(sizeof(struct Node));

new_node->data = new_data;

new_node->prev = NULL;

new_node->next = (*head_ref);

if ((*head_ref) != NULL) {

(*head_ref)->prev = new_node;

}

(*head_ref) = new_node;

}

void deleteNode(Node** head_ref, Node* del) {

if (*head_ref == NULL || del == NULL) {

return;

}

if (*head_ref == del) {

*head_ref = del->next;

}

if (del->next != NULL) {

del->next->prev = del->prev;

}

if (del->prev != NULL) {

del->prev->next = del->next;

}

free(del);

return;

}

void deleteEvenNodes(Node** head_ref) {

Node* temp = *head_ref;

Node* next;

while (temp != NULL) {

next = temp->next;

if (temp->data % 2 == 0) {

deleteNode(head_ref, temp);

}

temp = next;

}

}

void printLinkedList(Node* head) {

while (head != NULL) {

cout <data < ";

head = head->next;

}

}

int main() {

Node* head = NULL;

insertNode(&head, 1);

insertNode(&head, 2);

insertNode(&head, 3);

insertNode(&head, 4);

insertNode(&head, 5);

insertNode(&head, 6);

cout <

printLinkedList(head);

deleteEvenNodes(&head);

cout <

printLinkedList(head);

}输出结果

如果执行上述程序,则将得到以下结果。

删除前的链表:

6 -> 5 -> 4 -> 3 -> 2 -> 1 ->

Linked List after deletion:

5 -> 3 -> 1 ->

结论

如果您对本教程有任何疑问,请在评论部分中提及。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值