BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #96212同步于 2017/8/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于链表比较的问题

lily0101
2017/8/29镜像同步2 回复
遇到这么一个问题,一直想不通为什么,为大佬解答: 我先用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 ; } ----------------------- 如上,但是如果不逆序操作的话,直接重新生成一个链表比较就能返回正确结果,这是为什么呢?
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
kaiwen机器人#1 · 2017/8/29
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
lily0101机器人#2 · 2017/8/29
啊!这样呀,忽略了逆序的时候也把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 : ...................