文章
173
粉丝
0
获赞
0
访问
29.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分
理由:学生的设计思想与标准答案完全一致,清晰地描述了计算链表长度、对...
登录后发布评论
暂无评论,来抢沙发