华为OJ从单向链表中删除指定值的节点

来源:互联网 发布:独战乾坤进阶数据大全 编辑:程序博客网 时间:2024/06/05 14:40

描述

输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。

链表结点定义如下:

struct ListNode

{

      int       m_nKey;

      ListNode* m_pNext;

};

详细描述:

本题为考察链表的插入和删除知识。

链表的值不能重复

构造过程,例如

1 -> 2

3 -> 2

5 -> 1

4 -> 5

7 -> 2

最后的链表的顺序为 2 7 3 1 5 4 

删除 结点 2 

则结果为 7 3 1 5 4 

 

 

知识点链表,指针,结构体运行时间限制10M内存限制128输入

1 输入链表结点个数
2 输入头结点的值
3 按照格式插入各个结点
4 输入要删除的结点的值

输出

输出删除结点后的序列

样例输入5 2 3 2 4 3 5 2 1 4 3样例输出2 1 5 4
#include <iostream>  #include <string>  #include <vector>#include <algorithm>//#include "Customer.h"using namespace std;struct ListNode{int m_nKey;ListNode *m_pNext;};ListNode *head = NULL;ListNode* findNode(int value){ListNode *p = head;while (p != NULL){if (p->m_nKey == value)return p;p = p->m_pNext;}return NULL;}void insertNode(int cur, int pre){ListNode *p = (ListNode*)malloc(sizeof(ListNode));p->m_nKey = cur;p->m_pNext = NULL;if (head == NULL){ListNode *preNode = (ListNode*)malloc(sizeof(ListNode));preNode->m_nKey = pre;preNode->m_pNext = p;head = preNode;return;}else{ListNode *preNode = findNode(pre);p->m_pNext = preNode->m_pNext;preNode->m_pNext = p;}}void deleteNode(int value){ListNode *pre = NULL;ListNode *cur = head;while (cur!=NULL){if (pre == NULL && cur->m_nKey == value){pre = head;cur = cur->m_pNext;free(pre);pre = NULL;head = cur;continue;}if (cur->m_nKey == value){pre->m_pNext = cur->m_pNext;free(cur);cur = pre->m_pNext;}else{pre = cur;cur = cur->m_pNext;}}}int main(){int countNode;cin >> countNode;head = (ListNode*)malloc(sizeof(ListNode));cin>>head->m_nKey;head->m_pNext = NULL;int cur, pre;for (int i = 0; i < countNode-1; i++){cin >> cur >> pre;insertNode(cur, pre);}int deleteValue;cin >> deleteValue;deleteNode(deleteValue);while (head != NULL){cout << head->m_nKey << endl;head = head->m_pNext;}return 0;}


0 0
原创粉丝点击