C++实现链表逆序
2014-10-20 14:34
190 查看
链表的结构
分析:
1)若链表为空或只有一个元素,则直接返回;
2)设置两个前后相邻的指针p,q,将p所指向的节点作为q指向节点的后继;
3)向后移动,重复2),知道q为空;
4)调整链表头和链表尾。
实现代码如下:
<pre name="code" class="html"><pre name="code" class="cpp">struct listnode { int data; listnode *next; };
分析:
1)若链表为空或只有一个元素,则直接返回;
2)设置两个前后相邻的指针p,q,将p所指向的节点作为q指向节点的后继;
3)向后移动,重复2),知道q为空;
4)调整链表头和链表尾。
实现代码如下:
#include "iostream" using namespace std; struct ListNode { int data; ListNode *next; }; void prt_linked_list(ListNode* head); ListNode* reverse_linked_list(ListNode* head); void main() { ListNode *head; head=new ListNode; head->data=-1; head->next=NULL; int x; cin>>x; ListNode *p,*q; p=head; while(x!=-1) { q=new ListNode; q->data=x; q->next=NULL; p->next=q; p=q; cin>>x; } prt_linked_list(head); head=reverse_linked_list(head); prt_linked_list(head); } void prt_linked_list(ListNode* head) { ListNode *p; p=head->next; while(p!=NULL) { cout<<p->data; cout<<" "; p=p->next; } } ListNode* reverse_linked_list(ListNode* head) { ListNode *p,*q; ListNode *t = NULL; p=head; if (p->next==NULL||p->next->next==NULL) { return head; } p=head->next; q=head->next->next; while(q!=NULL) { t=q->next; q->next=p; p=q; q=t; } head->next->next=NULL; head->next=p; return head; }
相关文章推荐
- 【数据结构】用C++实现双循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- 双向循环链表的头插、中插、尾插、删除、逆序顺序显示(C++实现)
- 【数据结构】用C++实现单循环链表的各种操作(包括头删,尾删,插入,逆序,摧毁,清空等等)
- C++ 递归和非递归实现链表逆序
- C++实现链表逆序打印、链表反转
- c++实现单链表逆序
- [转]链表的逆序实现
- 双向循环链表删除算法的C++程序实现
- C++实现线形链表
- C++版-----链表实现
- C++基于链表泛型集合类的实现
- VC++编译问题汇总1 单链表的表示和实现,基于c++
- 链表的逆序实现
- C/C++用递归的方法求链表逆序
- C++链表实现堆栈:LinkList:Build a linklist using C++ class Stack
- 链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定
- 双向循环链表插入算法的C++程序实现
- c++实现单向链表反转的学习总结
- C/c++语言,求单向链表的逆序_普通方法_header+p+q工作指针
- C++链表实现