返回信息流遇到这么一个问题,一直想不通为什么,为大佬解答:
我先用reverseList()函数对链表进行逆序,然后用equalList()函数对原链表和逆序之后的链表进行比较,可是结果为什么都是返回true呢?
----------------------------------------------------------------------
ListNode* reverseNode(ListNode* head)
{
if(head == NULL || head->next == NULL)
return head;
ListNode* dummy = new ListNode(0);
dummy->next = head;
head = head->next;
dummy->next->next = NULL;
while(head!=NULL){
ListNode* q = head->next;
head->next = dummy->next;
dummy->next = head;
head = q;
}
return dummy->next;
}
---------
bool equalList(ListNode* head1,ListNode* head2)
{
while(head1 && head2)
{
if(head1->val != head2->val)
return false;//为什么没有在这儿就返回 false??
else
{
head1 = head1->next;
head2 = head2->next;
}
}
return true;
}
---------
int main()
{
ListNode* head = new ListNode(1);
head->next = new ListNode(1);
head->next->next = new ListNode(2);
head->next->next->next = new ListNode(1);
/*
ListNode* head1 = new ListNode(1);
head1->next = new ListNode(2);
head1->next->next = new ListNode(1);
head1->next->next->next = new ListNode(1);
*/
ListNode* head1 = reverseNode(head);
bool res = equalList(head,head1);
cout << res << endl;
return 0 ;
}
-----------------------
如上,但是如果不逆序操作的话,直接重新生成一个链表比较就能返回正确结果,这是为什么呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #96212同步于 2017/8/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
关于链表比较的问题
lily0101
2017/8/29镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
1. 你的逆序操作是原地逆序,ListNode* head1 = reverseNode(head)调用后,链表结构变成了1(head1)->2->1->1(head),head指向的结点没变,但这个结点已经变成了尾结点
2. 开始进入equalList(),目前head1=1,head=1,OK,下面开始head1=head1->next (2),head=head->next (NULL),下一轮while时head变成了NULL,直接跳出,所以返回true
3. equalList()其实还有些问题,比如1->1->2->1和1->1->2->1->3->4,按照这个逻辑来比较的结果也是true
啊!这样呀,忽略了逆序的时候也把head指针也进行了修改~感谢感谢~确实equalList()有问题,只是想弄明白这个问题,所以就没在while结束之后再进行判断了!!真的非常感谢感谢!
【 在 kaiwen 的大作中提到: 】
: 1. 你的逆序操作是原地逆序,ListNode* head1 = reverseNode(head)调用后,链表结构变成了1(head1)->2->1->1(head),head指向的结点没变,但这个结点已经变成了尾结点
: 2. 开始进入equalList(),目前head1=1,head=1,OK,下面开始head1=head1->next (2),head=head->next (NULL),下一轮while时head变成了NULL,直接跳出,所以返回true
: 3. equalList()其实还有些问题,比如1->1->2->1和1->1->2->1->3->4,按照这个逻辑来比较的结果也是true
: ...................