c++语言 创建一条链表,存入1~n。 链表创好后,从头到尾输出每个结点数据域的值。以观察链表建对与否。 然后,依次删除1,2,3,…… 每删一个结点,把链表输出一次。
时间: 2024-09-24 15:10:05 浏览: 37
在C++中创建一个包含1到n整数的链表,并实现从头到尾遍历并打印节点值的操作以及递归删除指定数字的过程,你可以按照以下步骤进行:
首先,我们需要定义链表节点结构体:
```cpp
#include <iostream>
// 链表节点结构
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
```
接下来,我们可以创建一个函数来生成包含1到n的链表:
```cpp
ListNode* createLinkedList(int n) {
if (n <= 0) return nullptr;
ListNode* head = new ListNode(1);
ListNode* current = head;
for (int i = 2; i <= n; ++i) {
current->next = new ListNode(i);
current = current->next;
}
return head;
}
```
为了打印链表内容,我们添加一个辅助函数:
```cpp
void printList(ListNode* head) {
while (head != nullptr) {
std::cout << head->val << " ";
head = head->next;
}
std::cout << std::endl;
}
```
现在我们需要一个递归函数来删除指定位置的元素:
```cpp
void deleteNode(ListNode*& head, int position) {
if (position == 1 && head != nullptr) { // 删除头节点
ListNode* temp = head;
head = head->next;
delete temp;
} else if (position > 1) {
ListNode* current = head;
for (int i = 1; i < position - 1 && current != nullptr; ++i) {
current = current->next;
}
if (current != nullptr) {
deleteNode(current->next, position - 1); // 递归删除下一个节点
}
}
}
```
最后,主函数中可以这样使用这些函数:
```cpp
int main() {
int n = 5; // 例如你想生成1到5的链表
ListNode* list = createLinkedList(n);
std::cout << "Original List: ";
printList(list);
// 删除并打印链表
for (int i = 1; i <= n; ++i) {
deleteNode(list, i + 1); // 从1开始计数
std::cout << "After deleting " << i << ": ";
printList(list);
}
delete list; // 确保释放内存
return 0;
}
```
当你运行这个程序,它会创建一个1到n的链表,然后每次删除一个节点并打印剩余部分,直到链表为空。
阅读全文