typedef struct node LinkNode;
struct node
{
int data;
LinkNode* next;
};
// 返回新链表头节点
LinkNode *reverse_link(LinkNode *head)
{
if(head == NULL)
return NULL;
LinkNode *prev , *curr , *reverse_head , *temp;
prev = NULL , curr = head;
while(curr->next)
{
temp = curr->next;
curr->next = prev;
prev = curr;
curr = temp;
}
curr->next = prev;
reverse_head = curr;
return reverse_head;
}
LinkNode *reverse_link_recursive(LinkNode *head)
{
if(head == NULL)
return NULL;
LinkNode *curr , *reverse_head , *temp;
if(head->next == NULL) // 链表中只有一个节点,逆转后的头指针不变
return head;
else
{
curr = head;
temp = head->next; // temp为(a2,...an)的头指针
reverse_head = reverse_link_recursive(temp); // 逆转链表(a2,...an),并返回逆转后的头指针
temp->next = curr; // 将a1链接在a2之后
curr->next = NULL;
}
return reverse_head; // (a2,...an)逆转链表的头指针即为(a1,a2,...an)逆转链表的头指针
}
转载: http://blog.csdn.net/hackbuteer1/article/details/8015964