题目

思路
搞清楚环形链表在 开头、 中部、结尾 ,以及链表是否为空?单个元素?多个元素?插入和删除的情况
代码有待精简
代码(未精简
#include<iostream>
using namespace std;
typedef long long ll;
struct node
{
ll data;
node* next;
node* prev;
node()
{
data = 0;
next = NULL;
prev = NULL;
//cout << data << next << prev << "111";
}
int append(ll n)
{
if(next == NULL)//只有头指针可以操作
{
node* temp = new node;
next = temp;
temp->data = n;
temp->next = temp;
temp->prev = temp;
return 1;//表示插入成功
}
node* record = next;
node* search = next;
while(search->next != record)
search = search->next;//找到尾部
node* temp = new node;
temp->data = n;
temp->prev = search;
temp->next = record;
record->prev = temp;
search->next = temp;
return 1;
};
int del(ll n)
{
int flag = 0;
if(next == NULL)//空
return flag;
node* record = next;
node* search = next;
if(search->next == record)//只有一个
{
if(search->data == n)
{
next = NULL;
delete search;
flag = 1;
}
return flag;
}
else if(search->next != record)//不止一个
{
while(record->data == n && search->next != record)
{
node*temp = record;
record->prev->next = record->next;
record->next->prev = record->prev;
next = record->next;
search = record->next;
record = record->next;
delete temp;
flag = 1;
}
while(search->next != record)
{
if(search->data == n)
{
node* temp = search;
search->next->prev = search->prev;
search->prev->next = search->next;
search = search->next;
delete temp;
flag = 1;
}
else
{
search = search->next;
}
}
//还剩最后一个数据没遍历,可能只有一个
if(search->next == record && record->next == search)
{
if(search->data == n)
{
next = NULL;
delete search;
flag = 1;
}
}
else
{
if(search->data == n)
{
node*temp = search;
search->next->prev = search->prev;
search->prev->next = search->next;
search = search->next;
delete temp;
flag = 1;
}
}
}
return flag;
};
void print()
{
node* record = next;
if(record == NULL)
{
//cout << "nothing" << endl;
return;
}
node* search = next;
while(search->next != record)
{
cout << search->data << " ";
search = search->next;
}
cout << search->data << endl;
};
};
int main()
{
ll n = 0;
node* head = new node;
while(1)
{
cin >> n;
if(n == -1)
break;
head->append(n);
}
//head->print();
while(1)
{
cin >> n;
if(n == -1)
break;
if(!head->del(n))
cout << "-1"<<endl;
//head->print();
}
head->print();
}
1313

被折叠的 条评论
为什么被折叠?



