码迷,mamicode.com
首页 > 其他好文 > 详细

反转链表-剑指offer-16

时间:2015-03-05 13:07:50      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:public   return   

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


分析:

逐个头插,实现反转

设置3个指针:head 头节点、prev 前一个节点、 cur 下一个节点


注意:链表为空,或者只有一个节点的情况!


代码:

#include<iostream>
using  namespace std;

struct ListNode{
	int val;
	ListNode *next;
	ListNode(int x) :val(x), next(nullptr){}

};
class Solution{
public:
	ListNode* reverseList(ListNode* pHead)
	{
		if (pHead == nullptr || pHead->next == nullptr) return pHead;

		ListNode dummy(-1);
		dummy.next = pHead;
		ListNode *head = &dummy;
		ListNode* prev = head->next;
		ListNode* cur = prev->next;
		do
		{
			prev->next = cur->next;
			cur->next = head->next;
			head->next = cur;
			cur = prev->next;

		} while (cur != nullptr);

		return dummy.next;
	}

};


剑指offer书上的代码:

ListNode* ReverList(ListNode* pHead)
{
    ListNode* pReverseHead = NULL;
    ListNode* pNode = pHead;
    ListNode* pPrev = NULL;
    
    while(pNode != NULL)
    {
        ListNode* pNext = pNode->m_next;
        
        if(pNext == NULL)
            pReverseHead = pNode;
         
         pNode->m_next = pPrev;
         
         pPrev = pNode;
         pNode = pNext;
    }
    
    return pReverseHead;
 }

欢迎讨论交流!

本文出自 “针挑土” 博客,请务必保留此出处http://3240611.blog.51cto.com/3230611/1617528

反转链表-剑指offer-16

标签:public   return   

原文地址:http://3240611.blog.51cto.com/3230611/1617528

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!