新建一个单链表l内存结构如图:
可见是带有3个node的list.
现在分析其逆置过程的内存结构变化,c++源码如下:
void reverse_4(list& l) {
node* a = l.next;
node* b = NULL;
while (a->next != NULL)
{
b = a->next; //-->①
a->next = b->next; //-->②
b->next = l.next; //-->③
l.next = b; //-->④
}
}
程序执行到①时的内存结构如图:
可见此时l的结构无变化,a截获了l.next,b截获了a->next,此时三者的结构为: a=0-1-2-N,b=1-2-N,l-0-1-2-N.
当程序执行到②时的内存结构如图:
可见将a->next与b->next嫁接的时候,l的第二个node也被影响,此时三者的结构变为: a=0-2-N,b=1-2-N,l-0-2-N.
当程序执行到③时的内存结构如图: