1. 定义单链表结构体,获取数据元素。 2.创建链表以输入-1结束。 3.在第i个节点处插入数据元素x。 4.删除第j个节点。 5.显示链表中的数据元素。 6. 逆序显示链表中的数据元素。
时间: 2024-09-09 12:14:53 浏览: 53
1. **定义单链表结构体**:首先,定义一个包含数据和指针的结构体表示链表节点,如在C++中:
```cpp
struct Node {
int data;
Node* next;
};
```
获取数据元素时,通过`node->data`访问。
2. **创建链表以输入-1结束**:每新加入一个非-1值,将它变成新节点,并将其`next`指向当前尾部,直到输入-1时停止:
```cpp
void addNode(Node*& head, int value) {
if (value == -1) return; // 结束标志
Node* newNode = new Node{value, nullptr};
if (head == nullptr) head = newNode; // 初始化为空链表
else newNode->next = head; // 非空链表追加
head = newNode; // 更新头部
}
```
3. **在第i个节点处插入数据元素x**:找到第i个节点并插入:
```cpp
void insertAtPosition(Node*& head, int position, int x) {
Node* temp = head;
for (int i = 0; i < position - 1 && temp != nullptr; ++i) temp = temp->next;
if (temp == nullptr) return; // 位置超出
Node* newNode = new Node{x, temp->next};
temp->next = newNode;
}
```
4. **删除第j个节点**:需计算索引,然后迭代删除对应节点:
```cpp
void deleteNode(Node*& head, int j) {
if (head == nullptr || j <= 0) return;
Node* prev = nullptr, *curr = head;
for (int i = 0; i < j - 1 && curr != nullptr; ++i) prev = curr, curr = curr->next;
if (curr == nullptr) return; // 超出范围
prev->next = curr->next;
delete curr; // 删除节点
}
```
5. **显示链表中的数据元素**:通过遍历节点打印数据:
```cpp
void displayList(Node* head) {
Node* temp = head;
while (temp != nullptr) {
cout << temp->data << " ";
temp = temp->next;
}
cout << endl;
}
```
6. **逆序显示链表中的数据元素**:可以先复制原链表,再倒置复制后的链表并显示:
```cpp
void reverseDisplay(Node* head) {
Node* copyHead = copyList(head);
displayList(copyHead);
}
Node* copyList(Node* src) {
// 实现链表复制...
}
```
阅读全文