数据结构——20 单链表逆序
Posted langtaol
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构——20 单链表逆序相关的知识,希望对你有一定的参考价值。
单链表——逆序
单链表逆序以及将后半部分结点逆序
#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;
以上是关于数据结构——20 单链表逆序的主要内容,如果未能解决你的问题,请参考以下文章