编程之美3.4扩展问题

编写一个函数,给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来

 

思路:只要把节点的下一个节点指针指向该节点的上一个节点即可,原来头结点的下一个节点指针置为空,返回新的节点即可

 
#include<iostream>
using namespace std;
typedef struct node{
	int data;
	node * next;
}Node;

Node * inverse(Node *head)
{
 
	Node * p=head;
	Node *pNext;
	Node *pLast=NULL;
	//更改next指针使其指向上一个节点
	while(p->next!=NULL)
	{
		pNext=p->next;
		p->next=pLast;
		pLast=p;
		p=pNext;
	}
	p->next=pLast;
	return p;

};

int main()
{

	Node *n1,*n2,*n3,*n4;
	n1=new Node();
	n2=new Node();
	n3=new Node();
	n4=new Node();
	n1->data=5;
	n1->next=n2;
	n2->data=6;
	n2->next=n3;
	n3->data=7;
	n3->next=n4;
	n4->data=8;
	n4->next=NULL;
	Node *head=inverse(n1);
	while(head!=NULL)
	{

		cout<<"node value is "<<head->data<<endl;
		head=head->next;
	}
	//int i;
	//cin>>i;
	return 0;
	
	
}

 

    原文作者:zhanglei0107
    原文地址: https://blog.csdn.net/zhanglei0107/article/details/7277555
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞