实现一个函数:void reverse(struct list_node *head)在尽量不借助辅助变量的情况下,实现任意长度单链表(不考虑内存限制)的反转(or 逆序)。
struct list_node{
int val;
struct list_node *next;
};
struct list{
struct list_node *head;
struct list_node *tail;
};
void reverse(struct list_node *head)
{
}
int main()
{
struct list list = {NULL, NULL};
struct list_node *p = NULL;
/*init list*/
/*打印反转前各节点的值*/
reverse(list.head);
p = list.head;
list.head = list.tail;
list.tail = p;
/*打印反转后各节点的值*/
}
代码实现:
#include <stdio.h>
struct list_node{
int index;
struct list_node *next;
};
struct list
{
struct list_node *head;
struct list_node *tail;
};
void reverse(struct list_node *head)
{
if(NULL == head|| NULL == head->next )
return;
reverse(head->next);
head->next->next = head;
head->next = NULL;
}
int main()
{
int i = 0;
struct list list = {NULL, NULL};
struct list_node node[10] = {0};
struct list_node *p;
for(i = 0; i < 9; i++)
{
node[i].index = i;
node[i].next = &node[i + 1];
}
node[9].index = 9;
list.head = node;
list.tail = node + 9;
reverse(list.head);
for(p = list.tail; p; p=p->next)
{
printf("%d \n",p->index);
}
return 0;
}