单链表的创建于反转

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1e5+5;
typedef struct Node{
	int val;
    Node *next;
} *LinkList;
void print(LinkList l) {//打印链表
	LinkList p = l->next;
	while(p){
		cout<<(p->val)<<" ";
		p = p->next;
	}
	cout<<endl;
}
int main(){
	int n,t;
	cin>>n;
	LinkList l,p,q,pr,te;
	l = (LinkList)malloc(sizeof(Node));
	l->next = NULL;
	for(int i = 0;i < n;i++){//头插法建立链表 
		cin>>t;
		p = (LinkList)malloc(sizeof(Node));
		p->val = t;
		p->next = l->next;
		l->next = p;
	}
	cout<<"插入后"<<endl; 
	print(l);
	p = l->next;//第一个节点 
	q = NULL;
	l->next = NULL;//把头结点空出来 
	while(p != NULL){//从前往后更新 
		pr = p->next;//保存当前节点的后继 
		p->next = q;//更新当前节点的后继
		q = p;//保存当前节点 
		p = pr;//指针后移,即更新当前节点 
	}
	l->next = q;//连接头结点 
	cout<<"反转后"<<endl; 
	print(l);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/JingleLiA/article/details/81286390