C++翻转链表图解
1.代码
双指针法(cur与pre):利用三个节点指针完成翻转,cur初始化为头指针,pre为辅助指针。tmp保存下次cur所指的位置。while循环里的过程在图解中体现。
LinkedNode* reverseList(LinkedNode* head)
{
LinkedNode* cur =head;
LinkedNode* pre =NULL;
LinkedNode* tmp =NULL;
while(cur){
tmp=cur->next;
cur->next=pre;//指向翻转
pre=cur;//更新pre
cur=tmp;//cur前进一位
}
dummyNode->next=pre;//虚拟头节点和反转后的链表连接,方便打印
return pre;
}
2.图解
图中单箭头表示“指向”的含义。根据循环可以得出结论,翻转链表的过程就是pre和cur指针每次向前递进一位(可以理解为手牵手一起走),cur->next负责改变指向,最后一次循环后,pre指向原本的最后一位,cur指向空指针退出循环。
dummyNode->next=pre;语句是在所属类中为反转的链表重新配置虚拟头节点,否则虚拟头节点还是指向原本的头节点。需要注意的是该语句放在所属类的公有成员函数里,可以调用私有数据dummyNode。在类外编写翻转函数时不能使用。