数据结构——反转链表的算法实现

记录一下链表的操作

这是曾经一道面试题

链表的考察更侧重于代码的书写和思路的形成。虽然说,链表的结构简单,但是涉及到指针的操作,容易引申出一些挑战性的考题,其中也牵涉到诸多小的细节的考虑,更能看出代码书写的能力和功底。

废话不多说上图分析加代码

反转后:

Status ListReverse(LinkList &L)
{/*链表逆序*/
    if(L==NULL||L->next==NULL)
        return -1;

    LNode* pNext = L->next->next;
    LNode* pNode = L->next;
    LNode* pTemp = L->next->next->next;    // 指向所处理的节点的下一个节点
    LNode* pFirst = L->next;   // 记录原链表的第一个节点,即逆转后的尾节点

    // 每次处理两个节点
    while(pNode->next && pNext)
    {
        pNext->next = pNode;    // 迭代逆转的两个节点是 pnext pnode
        pNode = pNext;
        pNext = pTemp;

        if(pTemp!=NULL)
            pTemp = pTemp->next;
        else
            ;
    }
    L->next = pNode;    // 头节点指向新的第一个元素节点
    pFirst->next = NULL;  // 尾节点置为NULL
    return 1;
}

猜你喜欢

转载自blog.csdn.net/qq_41420747/article/details/82692104