typedef struct _LIST_
{
int data;
struct _LIST_ *next;
}Node, *List;
/**
* @param brief 反转一个链表,递归方法
* @param head in out 链表头节点
* @return List 返回链表头节点
* */
List reverse_list(List head)
{
Node *p1, *p2, *p3; //分别前一个节点、为当前节点 、后一个节点
p1 = p2 = p3 = head;
//链表为空
if(0x00 == head)
{
return head;
}
p2 = p1->next; //p2 保存当前节点指向的下一个节点位置
while(0x00 != p2->next) //结束条件为当前节点为最后一个节点
{
p3 = p2->next; //保存下一个节点位置
p2->next = p1; //指向前一个节点
p1 = p2; //p1, p2 向后移动
p2 = p3;
}
head->next = 0x00;
head = p1;
return head;
}
/**
* @param brief 反转一个链表,递归方法
* @param head in out 链表头节点
* @param pNode in 当前节点
* @return List 返回链表头节点
* */
List reverse_list(List *head, Node* pNode)
{
if(0x00 == head || 0x00 == pNode->next)
{
*head = pNode;
return pNode;
}
Node* pTmp = reverse_list(head, pNode->next);
pTmp->next = pNode;
pNode->next = 0x00;
return pNode;
}
链表逆序
最新推荐文章于 2023-03-22 17:07:44 发布