利用尾插法建立单链表,利用头插法完成单链表的逆置并输出逆置后的单链表
时间: 2023-08-29 19:04:40 浏览: 85
单链表 创建 头插法 尾插法 就地逆置
5星 · 资源好评率100%
好的,我可以帮你解答这个问题。
首先,让我们了解一下尾插法建立单链表的思路:
1. 定义一个头指针和一个尾指针,初始时它们都指向头结点;
2. 定义一个新结点,输入数据;
3. 将新结点插入到尾结点之后,并将尾指针指向新结点;
4. 重复步骤2和3,直到输入完所有数据。
接下来,我们来看一下头插法完成单链表的逆置并输出逆置后的单链表的思路:
1. 定义一个新链表的头结点,并初始化为空;
2. 从原链表的头结点开始,依次取出每个节点,将其插入到新链表的头结点之后;
3. 重复步骤2,直到原链表中的所有节点都被取出并插入到新链表中;
4. 输出新链表的所有节点。
下面是C++代码实现尾插法建立单链表和头插法完成单链表的逆置并输出逆置后的单链表:
```c++
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x): val(x), next(nullptr) {}
};
ListNode* createList() {
ListNode* head = new ListNode(0);
ListNode* tail = head;
int x;
while (cin >> x) {
ListNode* p = new ListNode(x);
tail->next = p;
tail = p;
}
return head->next;
}
ListNode* reverseList(ListNode* head) {
ListNode* newHead = nullptr;
while (head) {
ListNode* p = head;
head = head->next;
p->next = newHead;
newHead = p;
}
return newHead;
}
void printList(ListNode* head) {
while (head) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
int main() {
ListNode* head = createList();
head = reverseList(head);
printList(head);
return 0;
}
```
希望能够帮到你!
阅读全文