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

    要求:定义一个函数,将一个链表反转。链表节点定义如下:

    struct ListNode
    {
    	int data;
    	ListNode *m_pNext;
    };
    思路:所谓反转即将链表中某个节点的原本指向后一个节点的指针域指向前一个节点,如果用pCurrent表示当前处理节点,pPrev表示当前处理节点的前一个节点,则很容易想到,反转即pCurretn->m_pNext=pPrev;但是如果直接这么操作的话,因为当前处理节点的下一个节点(记为pNext)的地址保存在pCurrent->m_pNext中,所以如果直接将当前节点指向前一个节点,则pNext的地址丢失,所以不能直接将pCurretn->m_pNext=pPrev;在这个语句之前,我们应该保存pNext的值,即pNext=pCurrent->m_pNext;
    用图表示思路如下:

    基于上述思路代码如下:

    void reverseList(ListNode * pHead)
    {
    	ListNode *pCurrent=pHead->m_pNext;//pCurrent的初始值指向第一个节点
    	pHead->m_pNext=NULL;//首先断开头节点
    	while(pCurrent!=NULL)
    	{
    		ListNode *pNext=pCurrent->m_pNext;//保存pNext的值,初始值指向第二个节点
    
    		pCurrent->m_pNext=pHead->m_pNext;//每次从原链表中摘下当前处理节点,让其指向反转后链表的第一个节点,初始值为让原链表中的第一个节点的指针域置空
    		pHead->m_pNext=pCurrent;//让头节点指向当前结点
    
    		pCurrent=pNext;//将当前节点后移,指向下一个带插入的节点
    
    	}
    }


  • 相关阅读:
    1082 射击比赛 (20 分)
    1091 N-自守数 (15 分)
    1064 朋友数 (20 分)
    1031 查验身份证 (15 分)
    1028 人口普查 (20 分)
    1059 C语言竞赛 (20 分)
    1083 是否存在相等的差 (20 分)
    1077 互评成绩计算 (20 分)
    792. 高精度减法
    791. 高精度加法
  • 原文地址:https://www.cnblogs.com/hainange/p/6334073.html
Copyright © 2011-2022 走看看