描述 | |
---|---|
知识点 | 链表,指针,结构体 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 1 输入链表结点个数 |
输出 | 输出删除结点后的序列 |
样例输入 | 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;
}