• (剑指Offer)面试题16:反转链表


    题目:

    定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

    链表的定义如下:

    struct ListNode{
        int val;
        ListNode* next;
    };
    

    思路:

    反转链表,需要调整结点的next指针,例如a->b->c,需要调整为a<-b<-c,只要将当前结点的next指针指向前一结点即可,如b->next=a,需要一个变量来保存前一结点;

    但调整当前结点的next指针之后,就无法获取原链表的下一结点了,因此需要一个临时变量来保存当前结点的下一结点。

    依次遍历整个链表,调整每个结点的next指针,最后返回原链表的最后一个结点指针即可。

    代码:

    struct ListNode{
        int val;
        ListNode* next;
    };
    
    ListNode* ReverseList(ListNode* pHead){
        ListNode* pReverseHead;
        ListNode* pCur=pHead;
        ListNode* pPrev=NULL;
        ListNode* tmp;
        while(pCur!=NULL){
            tmp=pCur->next;
            if(tmp==NULL)
                pReverseHead=pCur;
            pCur->next=pPrev;
            pPrev=pCur;
            pCur=tmp;
        }
        return pReverseHead;
    }
    

    在线测试OJ:

    http://www.nowcoder.com/books/coding-interviews/75e878df47f24fdc9dc3e400ec6058ca?rp=1

    AC代码:

    class Solution {
    public:
        ListNode* ReverseList(ListNode* pHead) {
    		ListNode* tmp;
            ListNode* pCur=pHead;
            ListNode* pPrev=NULL;
            while(pCur){
                tmp=pCur->next;
                pCur->next=pPrev;
                pPrev=pCur;
                pCur=tmp;
            }
            return pPrev;
        }
    };
  • 相关阅读:
    费马小定理
    Big Number阶乘位数计算(斯特林公式)
    V
    矩阵快速幂求斐波那契
    奇迹
    缘分
    求导
    拓扑排序
    线段树
    单调栈
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4647847.html
Copyright © 2020-2023  润新知