文章
78
粉丝
0
获赞
0
访问
3.5k
(1)
计算两个链表的长度 len1
和 len2
。
让较长的链表先移动 |len1 - len2|
步,使得两个链表剩余长度相同。
同时遍历两个链表,直到找到第一个相同的结点,即为共同后缀的起始位置。
(2)
int getLength(ListNode* head) { int len = 0; while (head) { len++; head = head->next; } return len; } // 找出共同后缀的起始结点 ListNode* findCommonSuffix(ListNode* str1, ListNode* str2) { // 计算两个链表的长度 int len1 = getLength(str1); int len2 = getLength(str2); // 让较长的链表先移动 |len1 - len2| 步 ListNode *p1 = str1, *p2 = str2; if (len1 > len2) { for (int i = 0; i < len1 - len2; i++) p1 = p1->next; } else { for (int i = 0; i < len2 - len1; i++) p2 = p2->next; } // 同步遍历,直到找到相同结点 while (p1 && p2 && p1 != p2) { p1 = p1->next; p2 = p2->next; } return p1; }
(3)O(m+n),m为str1的长度,n为str2的长度
评分及理由
(1)得分及理由(满分4分)
得分:4分
理由:学生的设计思想与标准答案完全一致,清晰地描述了计算链表长度、对...
登录后发布评论
暂无评论,来抢沙发