在Dev-C++用DLinkList DList_TailInsert(DLinkList &L)函数实现双链表的插入,用DListDelete(DLinkList &L,int i,int &e)函数实现双链表的删除功能
时间: 2024-09-26 18:04:05 浏览: 31
在Dev-C++中,双链表通常由`DLinkList`结构体表示,其中包含指向前一个节点和后一个节点的指针。`DList_TailInsert`函数用于在链表的尾部插入新节点,而`DListDelete`则负责删除指定位置的节点并返回删除的元素。
首先,我们假设`DLinkList`的基本结构类似这样:
```cpp
struct Node {
int data;
Node* prev;
Node* next;
};
typedef struct Node DLinkNode;
typedef DLinkNode* DLinkList;
```
`DList_TailInsert`函数实现:
```cpp
void DList_TailInsert(DLinkList& L, int value) {
// 如果链表为空,创建一个新的节点作为头结点
if (L == nullptr) {
L = new DLinkNode{value, nullptr, nullptr};
} else {
// 找到最后一个节点
DLinkNode* tail = L;
while (tail->next != nullptr)
tail = tail->next;
// 创建新节点,并将其添加到尾部
tail->next = new DLinkNode{value, tail, nullptr};
tail->next->prev = tail;
}
}
```
`DListDelete`函数实现:
```cpp
int DListDelete(DLinkList& L, int i, int& e) {
if (i < 0 || L == nullptr) return -1; // 检查索引是否有效
int count = 0;
DLinkNode* current = L;
// 寻找目标节点
while (count < i && current != nullptr) {
current = current->next;
++count;
}
if (current == nullptr) return -1; // 越界了
// 保存待删除元素的数据
e = current->data;
// 删除节点
if (current->prev != nullptr)
current->prev->next = current->next;
else
L = current->next; // 如果删除的是头节点,则更新链表头
if (current->next != nullptr)
current->next->prev = current->prev;
delete current; // 释放内存
return e;
}
```
阅读全文