欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

【剑指offer】反转链表,C++实现(链表)

发布时间:2025/4/16 c/c++ 6 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【剑指offer】反转链表,C++实现(链表) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1.题目

  • 输入一个链表的头结点,首先反转链表后,然后输出链表的所有元素(牛客网)。
struct ListNode {int val;struct ListNode *next; };

2.思路

# 反转链表

  辅助指针:定义三个用于翻转链表的辅助指针和一个用于表示翻转链表头结点的指针,node指向当前节点、left指向当前节点的前一个节点、right指向当前节点的下一个节点、ReverseHead指向翻转链表的头结点。

  翻转链表过程:循环翻转链表,每次循环翻转一个结点。判断node是否是最后一个结点,如果是最后一个节点,则reverseHead指向node(确定翻转链表表头节点),然后node指向left(翻转链表),退出循环;如果不是最后一个节点,则node指向left(翻转链表),移动left和node指针。

# 鲁棒性

  • 空链表
  • 有一个节点的链表
  • 有多个节点的链表

3.code

1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 ListNode* ReverseList(ListNode* pHead) 12 { 13 // 反转指针 14 ListNode* pNode=pHead; // 当前节点 15 ListNode* pPrev=nullptr;// 当前节点的上一个节点 16 ListNode* pNext=nullptr;// 当前节点的下一个节点 17 ListNode* pReverseHead=nullptr;//新链表的头指针 18 19 // 反转链表 20 while(pNode!=nullptr) 21 { 22 pNext=pNode->next; // 建立链接 23            24 if(pNext==NULL) // 判断pNode是否是最后一个节点 25 pReverseHead=pNode; 26 27 pNode->next=pPrev; // 指针反转 28 pPrev=pNode; 29 pNode=pNext; 30 } 31 return pReverseHead; 32 } 33 };

  

转载于:https://www.cnblogs.com/wanglei5205/p/8572458.html

总结

以上是生活随笔为你收集整理的【剑指offer】反转链表,C++实现(链表)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。