程序员面试一百题-19-反转链表

版权声明:知识无界限,大家可自由转载。 https://blog.csdn.net/xidianbaby/article/details/85037825

1-题目 :
输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。

2-思路 :
反转链表指向时,需要保存临时结点和指向,防止断链。

3-代码 :

struct ListNode
{
    int Key;
    ListNode *pNext;
};

ListNode *ReverseIteratively(ListNode *pHead)
{
    //反转链表的头结点
    ListNode *pReversedHead = NULL;
    //当前结点
    ListNode *pNode = pHead;
    //当前结点的前一个结点
    ListNode *pPrev = NULL;
    while (pNode != NULL)
    {
        //获取下一个结点并保存在pNext中
        ListNode *pNext = pNode->pNext;
        //如果PNext为空,说明当前结点是尾结点,即反转链表的头结点
        if (pNext == NULL)
        {
            pReversedHead = pNode;
        }
        //当前结点指向前一个结点
        pNode->pNext = pPrev;
        //设置前一个结点为当前结点
        pPrev = pNode;
        //移动当前结点到下一个结点
        pNode = pNext;
    }
    return pReversedHead;
}

猜你喜欢

转载自blog.csdn.net/xidianbaby/article/details/85037825