单链表反转
来源:互联网 发布:mmd镜头数据哪里导入图 编辑:程序博客网 时间:2024/06/06 09:09
两种方法实现;
#include <iostream>using namespace std;struct ListNode{ int val; ListNode * next;};void CreateList(ListNode * L,int n){ cin>>L->val; n--; for (int i = 0; i < n; i++) { ListNode * p = new ListNode; cin>>p->val; p->next = NULL; L->next = p; L = p; }}//非递归ListNode * ReverseList(ListNode * pHead){ ListNode * pRevesedHead = NULL;//反转后的头结点 ListNode * pNode = pHead;//当前结点 ListNode * pPrev = NULL;//前一结点 while (pNode != NULL)//判断非空 { ListNode * pNext = pNode->next;//下一结点(用pNext保存,避免链表断裂) if (pNext == NULL)//如果只有一个结点 { pRevesedHead = pNode;//则直接返回当前结点 } pNode->next = pPrev;//反转操作 pPrev = pNode;//将前一结点指针后移到当前结点位置 pNode = pNext;//将当前结点指针后移到下一结点位置 } return pRevesedHead;//返回}//递归ListNode * reverseList(ListNode *head){ //如果链表为空或者链表中只有一个元素 if(head == NULL || head->next == NULL) { return head; } else { //先反转后面的链表,走到链表的末端结点 ListNode *newhead = reverseList(head->next); //再将当前节点设置为后面节点的后续节点 head->next->next = head; head->next = NULL; return newhead; }}//主函数int main(){ ListNode * L = new ListNode; L->next = NULL; CreateList(L,5); ListNode * p;// p = ReverseList(L);p=reverseList(L); while (p) { cout<<p->val<<' '; p = p->next; } cout<<endl; return 0;}测试结果;
0 0
- 单链表反转
- 单链表反转
- 单链表反转
- 反转单链表
- 单链表反转
- 反转单链表
- 单链表-反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 单链表反转
- 反转单链表
- 单链表反转
- Mysql使用索引可能失效的场景
- 曲线比较Frechet距离算法
- 嵌入式数据库sqlite 的简单使用
- android 面试题
- 第一次写博客
- 单链表反转
- 有关获取并保存微信头像到本地服务器
- RelativeLayout和LinearLayout性能比较 相对布局和线性布局的性能比较
- 各种编程语言的适用场合-来自知乎
- 【物联网(IoT)开发】现在开始学习晚也未晚
- java软件开发需要了解的过程
- websocket
- centos 中修改localhost(主机名称)
- 精细化营销必知客户细分四大属性