较一般的方法,通过两个局部变量分别指示相邻的两个节点,将后一个节点的next指针指向前一个节点,遍历链表。first初始化为NULL,以便将反序前链表头next指针置为NULL。
#include <assert.h>
struct node
{
int value;
struct node *next;
};
typedef struct node NODE;
NODE *reverse_list2(NODE *phead)
{
NODE *first=NULL,*second=phead;
assert(NULL!=phead);
while(NULL!=phead)
{
second=phead->next;
phead->next=first;
first=phead;
phead=second;
}
return first;
}
void print_list(NODE *phead)
{
while(NULL!=phead)
{
printf("%4d",phead->value);
phead=phead->next;
}
}
|
int main()
{
NODE p1,p2,p3;
p1.value=5;
p1.next =
&p2 ;
p2.value=8;
p2.next=&p3;
p3.value=12;
p3.next=NULL;
NODE *head=&p1;
print_list(head);
printf("\n");
head=reverse_list2(head);
print_list(head);
return 0;
}
|
阅读(488) | 评论(0) | 转发(0) |