小明学习了链表这个数据结构后感觉很有意思,他想要实现这种数据结构并 实现链表的反转,但是小明同学不太会,他找到你帮忙,你能帮他实现吗? 1 实现链表 2
时间: 2024-05-15 21:19:12 浏览: 10
实现链表反转
当然,我可以帮助小明同学实现这个功能。 首先,我们需要定义一个链表的结构体,包含两个成员变量:一个是节点的值,一个是指向下一个节点的指针。代码如下:
```C++
struct ListNode {
int val;
ListNode* next;
};
```
接下来,我们可以实现链表的创建和打印函数。这里我们简单起见,先手动构造一个链表,包含四个节点,节点的值依次为1、2、3、4。代码如下:
```C++
ListNode* create_list() {
ListNode* head = new ListNode{1, nullptr};
head->next = new ListNode{2, nullptr};
head->next->next = new ListNode{3, nullptr};
head->next->next->next = new ListNode{4, nullptr};
return head;
}
void print_list(ListNode* head) {
while (head != nullptr) {
std::cout << head->val << " ";
head = head->next;
}
}
```
现在我们已经创建了一个包含四个节点的链表,接下来我们可以实现反转链表的功能。代码如下:
```C++
ListNode* reverse_list(ListNode* head) {
ListNode* prev = nullptr;
ListNode* cur = head;
while (cur != nullptr) {
ListNode* next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
```
我们定义两个指针prev和cur,分别指向节点的前一个和当前节点。通过循环,不断将当前节点的next指针指向前一个节点prev,更新prev和cur的位置,最终返回prev即为反转后的链表。
最后,我们可以在主函数中调用这些函数,实现链表反转的功能。代码如下:
```C++
int main() {
ListNode* head = create_list();
print_list(head);
std::cout << std::endl;
head = reverse_list(head);
print_list(head);
return 0;
}
```
输出结果为:
```
1 2 3 4
4 3 2 1
```
我们成功实现了链表反转的功能!
相关推荐
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![gz](https://img-home.csdnimg.cn/images/20210720083447.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)