数据结构——20 单链表逆序
2016-09-09 16:06
204 查看
单链表——逆序
单链表逆序以及将后半部分结点逆序
单链表逆序以及将后半部分结点逆序
#include <iostream> #define SIZE 100 using namespace std; struct node { int x; node* next; }; node* create(int n) //建立链表 { node *head=new(node); node *p=head; for(int i=0;i<n;i++) { node *temp=new node; temp->x=i; p->next=temp; p=temp; } p->next=NULL; return head; } void display(node *head) //打印链表 { node *p=head->next; while(p) { cout<<p->x<<" "; p=p->next; } cout<<endl; } node* invert(node* head) //链表逆序 { //node *tail=head->next; //第一个节点变为最后一个节点后,它没有下一个结点,指向NULL node* p=head->next; //p指向第一个结点 node* temp=p->next; //temp指向第二个结点 node*s; while(temp) { s=temp->next; temp->next=p; p=temp; temp=s; } head->next->next=NULL; //此时head还是指向第一个结点的,所以逆序后,让第一个结点指向为NULL head->next=p; //重新让head指向逆序后的第一个结点 return head; } void invertN(node* head,int n) //链表前n个顺序不变,后面的结点逆序 { node* p=head->next; for(int i=0;i<n-1;i++) //p指向需要逆序的开始结点之前那个结点 p=p->next; node* q=p; //保存第一个逆序结点之前的那个结点,逆序后,它的下一个结点为NULL node* temp=p->next; //开始逆序 node*s; while(temp) { s=temp->next; temp->next=p; p=temp; temp=s; } q->next->next=NULL; //逆序部分的最后一个结点指向为NULL,即刚才保存的那个q结点之后的结点 q->next=p; //逆序后,将链表链接起来 } int main() { int n=10; node *head=create(10); display(head); node *head1=invert(head); //逆序链表 display(head1); invertN(head,4); //逆序后面部分结点 display(head); return 0; }
相关文章推荐
- 数据结构复习笔记— —栈
- 数据结构复习笔记— —堆
- HDU 3487 splay
- 数据结构宏观把控
- 数据结构之栈与队列数学表达式的求值
- 动手敲算法——前言
- [从头学数学] 第261节 Python实现数据结构:红黑树(RB Tree)
- 不使用数据结构反转栈 递归 CVTE实习 CVTE是一家什么公司
- POJ1236 Network of Schools(强连通分量:Tarjan算法)
- 数据结构-顺序队列(C语言)
- 算法与数据结构 时间复杂度
- Java数据结构之单向链表,兼谈对象引用
- 数据结构(2)—— 栈和队列
- 数据结构之队列
- 数据结构之栈
- hdu4757(LCA+可持久化字典树)
- PAT Stack (30)
- 空间优化的字典树
- JAVA入门.零基础学Java语言 MOOC 第5周 数组(数据结构)
- Python学习笔记(5)--数据结构之字典dict