数据结构——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 单链表逆序的主要内容,如果未能解决你的问题,请参考以下文章

2.设计一个算法,将单链表中结点以逆序排列。逆序的单链表中的结点均为原表中的结点

算法习题---线性表之单链表逆序打印

用单链表来实现数据的逆序

线性表练习之Example012-逆序打印单链表

(单链表)单链表的整体逆序和局部逆序

不带头结点的单链表L,设计一个递归算法逆序输出所有结点值