一拿到这个题目首先想到可以把指针倒转,第一个元素置为单链表末尾,第二个的next指向第一个,以此类推到单链表原末尾,并将head->next指向原最后一个节点,由此完成单链表的反转。
接下来看源码吧:
#include<stdio.h>
struct node
{
int data;
Pnode next;
};
typedef struct node *Pnode;
Pnode *Strrev(Pnode head)
{
Pnode p=NULL,q=NULL,r=NULL;
if(head->next==NULL) //单链表为空
{
return NULL;
}
p=head->next; //p指向第一个节点
q=p->next; //q指向第二个节点
p->next=NULL; //原第一个节点置为末节点
while(q!=NULL)
{
r=q->next;
q->next=p; //指针倒转,第二个的下一个节点指向第一个
p=q; //p继续指向下一个
q=r; //q继续指向下一个
}
head->next=p; //指针倒转后,原末节点为第一个节点
rerurn head;
}