#include <iostream>
#include <stack>
#include <set>
using namespace std;
struct ListNode{
int data;
ListNode* next;
};
typedef ListNode List;
struct dListNode{
int data;
dListNode* next;
dListNode* previous;
};
typedef dListNode dList;
//头插法建立双向链表,与单链表类似
void createDListHead(dList* &L){
L = new dList;
L->next = L->previous = NULL;
int val;
cin >> val;
while (val != -1)
{
dListNode* p = new dList;
p->next = L->next;
p->previous = L;
p->data = val;
L->next = p;
cin >> val;
}
}
//尾插法建立双向链表,与尾插法类似
void createDListRear(dList* &L){
L = new dList;
L->next = L->previous = NULL;
int val;
cin >> val;
dListNode* q = L;
while (val != -1)
{
dListNode* p = new dList;
p->data = val;
p->previous = q;
p->next = NULL;
q->next = p;
q = p;
cin >> val;
}
}
//删除指定值的节点,例如3->1->2->3->3->4->3,输入3,结果为1->2->4;
void deleteDLNode(dList* L){
int val;
cout << "Please input the val you want to delete: ";
cin >> val;
dListNode* p = L;
dListNode* q = NULL;
while (p->next != NULL)
{
if (p->next->data == val)
{
q = p->next;
if (p->next->next!=NULL) //与单向链表不同之处,不要忘记加判断是否为空指针
p->next->next->previous = p;
p->next = q->next;
delete q;
}
else
p = p->next;
}
}
//尾插法建立单链表
void createListRear(List* &L){
L = new List;
L->next = NULL;
ListNode* q = L;
int val;
cin >> val;
while (val != -1)
{
ListNode * p = new List;
p->data = val;
p->next = NULL;
q->next = p;
q = p;
cin >> val;
}
return;
}
//头插法建立单链表
void createListHead(
链表的基本操作C/c++
最新推荐文章于 2022-04-29 17:05:15 发布