剑指offer--16.反转链表

来源:互联网 发布:淘宝网伴娘礼服 编辑:程序博客网 时间:2024/05/01 12:02

题目描述

输入一个链表,反转链表后,输出链表的所有元素。

这里写图片描述

这里写图片描述

这里写图片描述

非递归的方式:

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :            val(x), next(NULL) {    }};*/class Solution {public:    ListNode* ReverseList(ListNode* pHead) {        //pHead本身为空,直接返回NULL        if(pHead==NULL)            {            return NULL;        }        //pHead链表只有一个节点,直接返回pHead        if(pHead->next==NULL)            {            return pHead;        }        //需要注意指针的变化,不能使链表断开        ListNode *p=pHead;        ListNode *pPrev=NULL;        ListNode *pNext=NULL;        while(p!=NULL)            {            pNext=p->next;            p->next=pPrev;            if(pNext==NULL)                return p;            pPrev=p;            p=pNext;        }        return p;    }};

递归实现:

class Solution {public:    ListNode* ReverseList(ListNode* pHead) {        //pHead本身为空,直接返回NULL        //pHead链表只有一个节点,直接返回pHead        if(pHead==NULL||pHead->next==NULL)            {            return pHead;        }        else        {            //递归实现            ListNode *res=ReverseList(pHead->next);            pHead->next->next=pHead;            pHead->next=NULL;            return res;        }}};
0 0
原创粉丝点击