zoukankan      html  css  js  c++  java
  • (剑指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;
        }
    };
  • 相关阅读:
    高性能MySQL学习总结二----常见数据类型选择及优化
    springboot admin图文+视频教程
    xxl-job图文教程+视频讲解
    mybatis-plus视频教程
    springcloud视频教程
    springcloud系统化学习图文+视频教程
    docker系统化学习图文+视频教程
    【分享】docker全套视频教程
    是用Git还是SVN?
    NOIP知识点汇总
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4647847.html
Copyright © 2011-2022 走看看