链表节点数据结构定义
struct LinkListNode{
void* data;
struct LinkListNode* next;
};
递归方法
//递归实现链表翻转
struct LinkNode* reverse(struct LinkNode* lNode)
{
if(lNode->next == NULL)
{
return lNode;
}
struct LinkNode* nodeTemp = reverse(lNode->next);
lNode->next->next = lNode;
lNode->next = NULL;
return nodeTemp;
}
非递归方法
struct LinkNode* reverse2(struct LinkNode* head)
{
if(head == NULL || head->next == NULL)
{
return NULL;
}
struct LinkNode* p1 = head->next;
struct LinkNode* p2 = p1->next;
head->next = NULL;
p1->next = NULL;
while (p2)
{
struct LinkNode* node = p2->next;//save the next node of p2
p2->next = p1;
p1=p2;//move ptr
p2 = node;
}
head->next = p1;
return head;
}