CC小知识汇集链表反转源代码分享

中科获平安医院殊荣 http://m.39.net/disease/a_6169824.html

引言

链表反转是C/C++中常见的问题,也是面试笔试中经常遇到的问题之一,针对此类问题,如果在内存分配方面没有特别的要求的话,直接使用vector容器较为方便;如果对内存方面要求严格控制的话,则需要使用迭代法较为稳妥。本节将对两种情况下的代码编写进行简要的分析总结。

需求描述

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。

如当输入链表{1,2,3}时,

经反转后,原链表变为

{3,2,1},所以

对应的输出为{3,2,1}。

以上转换过程

如下图所示:

测试样例

示例1

输入:

{1,2,3}

复制

返回值:

{3,2,1}

复制

示例2

输入:

{}

复制

返回值:

{}

复制

说明:

空链表则输出空

代码示例

思路一:在内存要求不高的时候,可以使用vector容器,先将量表内容保存到vector容器中,然后对其进行反转,最后构造新的链表,将其按照发转后的内容保存起来即可。

具体代码内容如下:

ListNode*ReverseList(ListNode*pHead)

{

if(nullptr==pHead)

{

returnnullptr;

}

vectorListNode*vec;

while(pHead)

{

vec.push_back(pHead);

pHead=pHead-next;

}

reverse(vec.begin(),vec.end());//反转vector,也可以逆向遍历

ListNode*head=vec[0];

ListNode*cur=head;

for(inti=0;ivec.size();++i){//构造链表

cur-next=vec[i];//当前节点的下一个指针指向下一个节点

cur=cur-next;//当前节点后移

}

cur-next=nullptr;//将最后一个节点的下一个指针指向nullptr,必须有此步骤

returnhead;

}

购买专栏解锁剩余41%


转载请注明:http://www.aierlanlan.com/rzfs/3687.html

  • 上一篇文章:
  •   
  • 下一篇文章: