欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > C++面试(9)-----反转链表

C++面试(9)-----反转链表

2025/6/17 13:24:52 来源:https://blog.csdn.net/jndingxin/article/details/148633435  浏览:    关键词:C++面试(9)-----反转链表
  • 操作系统:ubuntu22.04
  • IDE:Visual Studio Code
  • 编程语言:C++11

题目描述

输入一个链表,输出该链表反转之后的链表。例如:

输入: 1->2->3->4->5->NULL

输出: 5->4->3->2->1->NULL

解决方案

这个问题可以通过多种方法解决,包括递归法和迭代法。下面分别介绍这两种方法。

方法一:迭代法

使用三个指针来逐步反转链表中的每一个节点,直到遍历完整个链表。
代码实现(C++)

struct ListNode {int val;ListNode* next;ListNode( int x ) : val( x ), next( nullptr ) {}
};ListNode* reverseList( ListNode* head )
{ListNode* prev = nullptr;  // 前驱节点ListNode* curr = head;     // 当前处理的节点while ( curr != nullptr ){ListNode* nextTemp = curr->next;  // 暂存当前节点的下一个节点curr->next         = prev;        // 将当前节点指向前驱节点prev               = curr;        // 移动前驱节点到当前节点curr               = nextTemp;    // 移动到下一个待处理节点}return prev;  // 新的头节点是原链表的最后一个节点
}int main()
{ListNode* node1 = new ListNode(1);node1->next = new ListNode(2);node1->next->next = new ListNode(3);node1->next->next->next = new ListNode(4);node1->next->next->next->next = new ListNode(5);ListNode* res = reverseList(node1);ListNode *head = res;while(res != nullptr){std::cout<< res->val<<std::endl;res = res->next;}
}

输出:

5
4
3
2
1

方法二:递归法

递归地反转链表,对于每个节点,假设其后续节点已经被正确反转,然后调整当前节点的指向。

代码实现(C++)

struct ListNode {int val;ListNode* next;ListNode( int x ) : val( x ), next( nullptr ) {}
};
ListNode* reverseList( ListNode* head )
{// 基本情况:如果头节点为空或只有一个节点,则直接返回头节点if ( head == nullptr || head->next == nullptr ){return head;}// 递归调用,反转剩余链表ListNode* p = reverseList( head->next );// 反转当前节点与下一个节点之间的连接head->next->next = head;head->next       = nullptr;return p;  // 返回新的头节点
}int main()
{ListNode* node1 = new ListNode(1);node1->next = new ListNode(2);node1->next->next = new ListNode(3);node1->next->next->next = new ListNode(4);node1->next->next->next->next = new ListNode(5);ListNode* res = reverseList(node1);ListNode *head = res;while(res != nullptr){std::cout<< res->val<<std::endl;res = res->next;}
}

输出:

5
4
3
2
1

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词