能够返回正确的逆置链表,但是原链表会在第二个节点断开,就好像中途变成了局部变量了一样?
请把代码发全,谢谢。你这样发图片跟写了个
cout << "5" << endl;
cout << "1 2 3 4 5" << endl;
cout << "1" << endl;
cout << "5 4 3 2 1" << endl;
然后让我们查错没区别
这是肯定的,因为q = L,并非将L复制一份,而是仅仅将q这个指针指向L,下面q->Next = p也是在原来的list上修改。因为倒序了,所以1后面没有节点了。
你需要先复制一份,然后再在复制的上面倒序。
大致的代码思路(因为你没有给出完整代码所以只能手写给你不保证和你的程序完全匹配你得自己修改,不知道你为什么提问还藏着代码不示人,害羞?)
List Copy(List L)
{
List head1, head;
head1 = head = (List)malloc(sizeof(Node));
head.Element = L.Element;
head.Next = L.Next;
L = L.Next;
while (L != null)
{
head = (List)malloc(sizeof(Node));
head.Element = L.Element;
head.Next = L.Next;
L = L.Next;
}
return head1;
}
然后在你的代码开头加上
List L2 = Copy(L);
下面凡是遇到L的地方都换成L2即可。