考虑以下“C”代码片段,它从整数的有序列表中删除重复项。
Node *remove-duplicates(Node *head, int *j)
{
Node *t1, *t2;
*j=0;
t1 = head;
if (t1! = NULL) t2 = t1 →next;
else return head;
*j = 1;
if(t2 == NULL)
return head;
while t2 != NULL)
{
if (t1.val != t2.val) --------------------------→ (S1)
{
(*j)++; t1 -> next = t2; t1 = t2: ----------→ (S2)
}
t2 = t2 →next;
}
t1 →next = NULL;
return head;
}
假设列表在以下问题中包含n 个元素(n≥2)。
一种)。语句S1 中的比较进行了多少次?
b)。执行标记为S2 的语句的最小和最大次数是多少?
C)。当函数完成时, j指向的整数中的值有什么意义?回答:
解释:
- (一种)。 n-1 次,因为比较是对 n 个元素成对进行的。
- (b)。最大值:所有不同元素的 n-1,最小值:所有相同元素的 0。
- (C)。 j 保持列表中不同节点的计数。
这个问题的测验