【C++】反转单链表(面试的时候屡次被问到)
来源:互联网 发布:java做统计报表 编辑:程序博客网 时间:2024/05/16 08:55
问题:已知一个单链表,将这个单链表反转过来,并返回反转之后的单链表。
思想:使用头插法的思想,将原本单链表中的数据反转,即每次插入数据的时候,不是将数据放到链表的末尾而是放到链表的头部。
代码如下:
ListNode* ReverseLists(ListNode* l) { ListNode *newList = new ListNode(); newList->next=NULL; ListNode *p=l; ListNode *pNext; while(p->next!=NULL){ pNext=p->next; p->next=newList->next; newList->next=p; p=pNext; } return newList;}
完整的代码如下:
#include <iostream>using namespace std;//定义链表的结构struct ListNode { int val; ListNode *next; ListNode() {} ListNode(int x) : val(x), next(NULL) {}};//反转链表//方法一,使用头插法的思想获取。ListNode* ReverseLists(ListNode* l) { ListNode *newList = new ListNode(); newList->next=NULL; ListNode *p=l; ListNode *pNext; while(p->next!=NULL){ pNext=p->next; p->next=newList->next; newList->next=p; p=pNext; } return newList;}//将数据添加到LNode中void AddLNode(ListNode* head,int x){ ListNode* pNew = new ListNode(); pNew->next=NULL; pNew->val=x; if(head==NULL) head=pNew; else{ ListNode *temp=head; while(temp->next!=NULL){ temp=temp->next; } temp->next=pNew; }}// 打印LNode中的数据void printLnode(ListNode* head){ ListNode *p=head; while(p!=NULL){ cout<<p->val<<" "; p=p->next; } cout<<endl;}int main(){ /* //也可以通过这种方式添加数据到链表中,但是有点low,所以下面采取了定义一个函数AddLNode()的形式。 ListNode* head=new ListNode(1); ListNode* node2=new ListNode(7); ListNode* node3=new ListNode(13); ListNode* node4=new ListNode(4); ListNode* node5=new ListNode(5); head->next=node2; node2->next=node3; node3->next=node4; node4->next=node5; node5->next=NULL; */ ListNode* head=new ListNode(1); AddLNode(head,12); AddLNode(head,4); AddLNode(head,14); AddLNode(head,32); cout<<"反转之前:"<<endl; printLnode(head); ListNode* rear=ReverseLists(head); cout<<"反转之后:"<<endl; printLnode(rear); return 0;}
阅读全文
0 0
- 【C++】反转单链表(面试的时候屡次被问到)
- 屡次失败面试的心理安慰
- 单链表反转(C++)
- C/C++面试程序题(一)——字符串反转、链表反转的递归、非递归实现
- 面试题目之单链表的反转
- 单链表的反转实现(C++)
- C语言:单链表的反转
- 20140707电话面试(单链表反转)
- 单链表反转 -面试
- 数据结构 - 反转单链表(C++)
- 单链表反转(C代码)
- C:单链表反转(循环)
- 求职面试(字符串反转,单词反转)
- 简单实现C中sizeof函数是怎么实现的(面试的时候可能用到)
- 面试时候的智力题
- Coding一下“反转单链表”,当是下周面试的练笔
- 程序员面试系列——单链表的反转
- (c语言)字符串的反转函数
- Mindjet MindManager 2018 中文破解版下载及新功能介绍
- vue.js或js实现中文A-Z排序
- java并发编程
- ARM定义特殊寄存器(*(volatile unsigned long *))的理解
- 【廖雪峰Python习题集】调用函数
- 【C++】反转单链表(面试的时候屡次被问到)
- 高数 01.[01-10]习题课
- 理解图像的傅里叶变换(细心分析)
- 单例模式代码例子
- 数据结构 — 浅析红黑树原理以及实现
- 20171101
- MapReduce的工作原理
- myeclipse2014安装axis2插件
- XML