题目一:程序填空 删除单链表中重复结点,重复结点只保留一个,head是单链表首结点指针 struct node *delete(struct node *head) { struct node *p,*q,*r,*tmp; //r指向q的前驱结点 p=q=head; for(p=head; ;p=p->next) {r=p; for(q=p->next;q!=NULL;) if(q->x==p->x) { ; tmp=q; q=q->next; free(tmp);} else {r=q; ;} } ;//返回删除重复结点的单链表头 }
时间: 2023-05-14 14:07:18 浏览: 105
答案一:
这是一个删除单链表中重复结点的程序,重复结点只保留一个。其中,head是单链表首结点指针。程序中使用了两个指针p和q,p指向当前结点,q指向p的下一个结点。如果q结点的值与p结点的值相同,则删除q结点;否则,将q结点赋值给r,继续遍历链表。最后返回删除重复结点后的单链表头。
完整代码如下:
struct node *delete(struct node *head)
{
struct node *p, *q, *r, *tmp; //r指向q的前驱结点
p = q = head;
for (p = head; p != NULL; p = p->next)
{
r = p;
for (q = p->next; q != NULL;)
{
if (q->x == p->x)
{
tmp = q;
q = q->next;
free(tmp);
}
else
{
r = q;
q = q->next;
}
}
}
return head;
}
注意:这是一个C语言程序,需要在C语言环境下编译运行。
题目二:请简要介绍一下Lua中的闭包(closure)和工厂模式(factory pattern)。
答案二:
闭包(closure)是指一个函数可以访问其定义域外部的变量或函数,这些变量或函数被称为自由变量或自由函数。在Lua中,闭包可以通过函数嵌套和upvalue实现。函数嵌套是指在一个函数内部定义另一个函数,内部函数可以访问外部函数的局部变量和参数。upvalue是指一个函数中引用的外部变量或函数,这些变量或函数会被保存在函数的upvalue表中,供函数使用。
工厂模式(factory pattern)是一种创建型设计模式,它提供了一种封装对象创建过程的方式。工厂模式可以通过一个工厂类来创建对象,客户端只需要调用工厂类的方法即可获取所需的对象,而不需要直接调用对象的构造函数。在Lua中,可以使用闭包和table来实现工厂模式。闭包可以封装对象创建过程中的一些细节,而table可以作为对象的容器,保存对象的属性和方法。
阅读全文