编写一个函数,给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来
思路:只要把节点的下一个节点指针指向该节点的上一个节点即可,原来头结点的下一个节点指针置为空,返回新的节点即可
#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;
}