剑指offer-面试题5 反向输出链表值

typedef struct ListNode* List;
struct ListNode
{
    int Value;
    struct ListNode* Next;
};
void ReverseList1(List list)   //使用递归
{
    if(list != NULL)
    {
        if(list->Next != NULL)
        {
            ReverseList(list->Next);
        }
        std::cout<<list->Value<<" ";
    }
}
void ReverseList2(List list)   //使用栈
{
    std::stack<List> stackList;
    struct ListNode* node = list;
    while(node != NULL)
    {
        stackList.push(node);
        node = node->Next;
    }
    while(!stackList.isEmpty())
    {
        std::cout<<stackList.top()->Value<<" ";
        stackList.pop();
    }
}
void ReverseList3(List list)    //反转指针指向
{
    List p = NULL;
    List temp = NULL;
    if(list != NULL)
    {
        return NULL;
    }else
    {
        temp = list->Next;
        while(temp->Next != NULL)
        {
            p = temp->Next;
            temp->Next = p->Next;
            p->Next = list->Next;
            list->Next = p;
        }
        while(list != NULL)
        {
            std::cout<<list->Value<<" ";
            list = list->Next;
        }
    }
}
//反转链表
ListNode* ReverseList2(ListNode* pHead)
{
    ListNode* pNode=pHead;//当前结点
    ListNode* pPrev=NULL;//当前结点的前一个结点
    while(pNode!=NULL)
    {
        ListNode* pNext=pNode->m_pNext;
        pNode->m_pNext=pPrev;//当前结点指向前一个结点
        pPrev=pNode;//pPrev和pNode往前移动。
        pNode=pNext;//这里要使用前面保存下来的pNext,不能使用pNode->m_pNext
    }
    return pPrev;//返回反转链表头指针。
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值