剑指offer-面试题16.反转链表
来源:互联网 发布:无锡胡埭加工中心编程 编辑:程序博客网 时间:2024/06/04 07:54
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后的头结点
链表结点定义如下:
1 struct ListNode2 {3 int m_nKey;4 ListNode* m_pNext;5 }
其实反转链表主要是链表指针的操作,一定要很清楚才行。其实在面试题5,从尾到头打印链表的第一种方式已经实现了这种方式:
这里在梳理下反转链表的过程:
比如链表:1->2->3->4->5->6
1.定义三个指针p1,p2,p3
2.p1指向1,p2指向2,p3指向3
3.p2->next=p1;然后p1=p2,p3=p2
4.这时1<-2 3->4->5->6 p1指向2,p2指向3,p3指向4
5.重复第4步(p2->next=p1,p1=p2,p3=p2,此时1<-2<-3 4->5->6 依次类推)
6.结束条件为p2==NULL,最后将头结点的next指向NULL即可
实现如下:
1 #include <iostream> 2 using namespace std; 3 4 struct ListNode 5 { 6 int data; 7 struct ListNode *next; 8 }; 9 10 struct ListNode* CreateList()11 {12 struct ListNode* Head,*p;13 Head=(struct ListNode*)malloc(sizeof(ListNode));14 Head->data=0;15 Head->next=NULL;16 p=Head;17 18 cout<<"Create List....(0-exit!)"<<endl;19 while(true)20 {21 int Data;22 cin>>Data;23 if(Data!=0)24 {25 struct ListNode* NewNode;26 NewNode=(struct ListNode*)malloc(sizeof(ListNode));27 NewNode->data=Data;28 NewNode->next=NULL;29 p->next=NewNode;30 p=p->next;31 }32 else33 {34 break;35 }36 }37 38 return Head->next;39 }40 41 void PrintList(struct ListNode* Head)42 {43 cout<<"The List is: ";44 45 struct ListNode *p;46 p=Head;47 while(p!=NULL)48 {49 cout<<p->data<<" ";50 p=p->next;51 }52 cout<<endl;53 }54 55 struct ListNode* ReversePrint(struct ListNode* Head)56 {57 struct ListNode *p1,*p2,*p3;58 59 p1=Head;60 p2=p1->next;61 62 while(p2!=NULL)63 {64 p3=p2->next;65 p2->next=p1;66 p1=p2;67 p2=p3;68 }69 70 Head->next=NULL;71 return p1;72 }73 74 int main()75 {76 ListNode *Head,*NewHead;77 Head=CreateList();78 PrintList(Head);79 NewHead=ReversePrint(Head);80 81 cout<<endl<<"The Reverse List is:"<<endl;82 PrintList(NewHead);83 return 0;84 }
运行截图:
0 0
- 《剑指Offer》面试题:反转链表
- 剑指offer-面试题16.反转链表
- offer面试题-----链表反转
- [剑指offer][面试题16]反转链表
- 【剑指offer】面试题16:反转链表
- 剑指offer 面试题16 反转链表
- 剑指Offer面试题16 反转链表
- 《剑指Offer》面试题16:反转链表
- 《剑指Offer》学习笔记--面试题16:反转链表
- 剑指offer 面试题16—反转链表
- 【剑指Offer学习】【面试题16 :反转链表】
- 【剑指Offer面试题】 九度OJ1518:反转链表
- 剑指offer面试题16-反转链表
- 剑指offer面试题16之反转链表
- 剑指offer:面试题16 反转链表
- 剑指offer-面试题16:反转链表
- 剑指offer之面试题16:反转链表
- 剑指Offer----面试题16:反转链表
- JAVA_异常处理
- bzoj 2005: [Noi2010]能量采集
- 关于C++中getline()函数的一个陷阱
- Java笔记
- 关于控件重绘函数/消息 OnPaint,OnDraw,OnDrawItem,DrawItem的区别
- 剑指offer-面试题16.反转链表
- Hdu1068(二分图的最大匹配)
- cloudstack 添加物理主机可能错误总结
- 【湖南集训 4.7】yist
- Android-通过Java代码来实现属性动画
- hrbust 1426 集训队的晚饭【dp】
- 剑指offer-面试题17.合并两个排序的链表
- ToolBar的使用
- 学习c++之前需要准备什么?