zoukankan      html  css  js  c++  java
  • 反转链表

    • 问题描述:

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

    struct ListNode{
    	int m_nKey;
    	ListNode* m_pNext;
    }
    
    • 分析:

       这个问题看起来与之前做的从尾到头打印链表看起来很相似,都是链表的“逆序”。但不同的是,这道题要求反转链表,也就是改变原有链表的结构,而不只是逆序的打印内容而已。所以,这道题我们要改变的是链表中每个结点的指针,让其指向其前一个结点。
       那么问题来了,让当前结点指向其前一个结点时,原本存在该结点指针域的后一个结点的指针将会丢失,也就是说链表会在此时断开。所以,在调整当前结点的指针域(也就是m_pNext)时,要先把其后一个结点保存下来。当然,要把当前结点指向其前一个结点,还需要保存其前一个结点。
      综上,我们需要定义三个指针,分别指向当前遍历到的结点、它的前一个结点以及它的后一个结点。
      代码如下:

      ListNode* ReversList(ListNode* pHead)
      { // pReversedHead用来指向反转后的头结点
      	ListNode *pReversedHead = NULL; 
      	ListNode *pNode = pHead;  //当前结点
      	ListNode *pPrev = NULL;   //当前结点的前一个结点
      	while(pNode != NULL)
      	{
      		ListNode *pNext = pNode->m_pNext;
      		if(pNext == NULL)
      			pReversedHead == pNode; //到达链表尾结点,将其作为反转后的头
      		pNode->m_pNext == pPrev;
      		pPrev = pNode;
      		pNode = pNext;
      	}
      	return pReversedHead; //当输入头指针为空时,输出一个空指针
      }
      
  • 相关阅读:
    数学 之 hdu 4722
    DP + math 之 Codeforces 126D
    计算几何 之 hdu 1077 poj 1981 O(n^2logn)
    计算几何 之 hdu 1077 poj 1981 O(n^3)
    字典树 之 hdu 1800
    字典树 之 poj 1056
    字典树 之 hdu 4099
    字典树 之 hdu 1247
    解决java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date
    显示Mac壁纸所在路径以及接下来的事情你懂得
  • 原文地址:https://www.cnblogs.com/Bill-LHR/p/6756382.html
Copyright © 2011-2022 走看看