代码也很简单,空间复杂度为O(1)。
算法描述,pre记录前一个node,current记录当前node,temp存储current的下一个node。这样就形成了一个循环,temp存储current的下一个node之后又current的next指向pre节点;这样就逆序了一个节点。然后pre和current整体后移一位,继续逆序第二个节点。以此类推。
typedef struct Node{
int value;
struct Node *next;
}node;
node* reverseList(node* head)
{
if(head==NULL || head->next==NULL)
{
return head;
}
node *pre=NULL;
node *current=head;
node *temp;
while(current!=NULL)
{
temp=current->next;
current->next=pre;
pre=current;
current=temp;
}
return pre;
}
int main()
{
node arr[5]={1,&arr[1],2,&arr[2],3,&arr[3],4,&arr[4],5,NULL};
node *p=reverseList(arr);
while(p!=NULL)
{
printf("%d\n",*p);
p=p->next;
}
system("pause");
return 0;
}