1,题目
定义一个函数,输入一个链表的头节点,逆置该链表并输出逆置链表的头节点,链表的定义如下:
typedef int ElemType;
typedef struct LNode
{
ElemType data;
LNode *next;
}LNode;
2,链表逆置代码实现
LNode *ReverseList(LNode *phead)
{
if(phead == NULL) return NULL;
LNode *pReverseList = NULL; //逆置后链表的头节点
LNode *pNode = phead; //当前节点
LNode *pPrev = NULL; //前驱节点
while(phead != NULL)
{
LNode *pNext = pNode->next; //后继节点
if(pnext == NULL)
pReverseList = pNode;//最后一个节点
pNode->next = pPrev;
pPrev = pNode;
pNode = pNext;
}
return pReverseList;
}
3,主要思路
链表逆置是定义三个指针,分别指向当前节点,以及它的前驱节点和后继节点,判断当前节点不等于NULL,让当前节点的next指向它的前驱,然后把当前节点赋给前驱节点,把后继节点赋给当前节点,一直遍历,直到当前节点为NULL,链表也就实现了逆置。