本题要求实现一个函数, pur_LinkList(LinkList L)函数是删除带头结点单链表的重复结点。
时间: 2023-05-21 20:06:30 浏览: 225
可以使用两层循环来遍历链表,将当前节点与后面的节点进行比较,若遇到重复节点则删除后面的节点。
下面是示例代码:
```
void pur_LinkList(LinkList L) {
if (L == NULL || L->next == NULL) {
return;
}
ListNode *p, *q, *r;
p = L->next;
while (p != NULL) {
q = p;
while (q->next != NULL) {
if (q->next->data == p->data) {
r = q->next;
q->next = r->next;
delete r;
}
else {
q = q->next;
}
}
p = p->next;
}
}
```
这段代码的时间复杂度为 $O(n^2)$,若需要更高效的实现,可以使用哈希表等数据结构来避免重复比较。
相关问题
本题要求实现一个函数, pur_LinkList(LinkList L)函数是删除带头结点单链表的重复结点。
好的,以下是实现pur_LinkList函数的示例代码:
```c
typedef struct Node {
int data;
struct Node *next;
} Node, *LinkList;
void pur_LinkList(LinkList L) {
Node *p = L->next; // p指向第一个节点
while (p != NULL) {
Node *q = p;
while (q->next != NULL) {
if (q->next->data == p->data) { // 如果有相同的结点
Node *del = q->next;
q->next = del->next;
free(del); // 删除结点
} else {
q = q->next;
}
}
p = p->next;
}
}
```
函数的实现思路是:从第一个结点开始遍历链表,对于每个结点,再从它的下一个结点开始遍历到链表结尾,如果有和它相同的结点,则删除相同的结点。最后得到的链表就是没有重复结点的链表。
解释下我这段代码:for cur in (SELECT l.*, (SELECT scv.code_value_name FROM sys_code_values_vl scv, sys_codes_vl sc WHERE sc.code_id = scv.code_id AND scv.code_value = l.atm_type AND sc.code = 'PUR_ATMACHMENT_TYPE') atm_type_desc FROM fnd_atm_lines l WHERE 1 = 1 AND l.source_table_name = 'PUR_QUALIFIED_VENDOR_FILE' AND l.source_pk_value = p_qualified_hds_id ) loop --查询附件数量 SELECT count(1) into v_atm_count FROM fnd_atm_attachment_multi f, fnd_atm_attachment fa WHERE f.table_name = 'PUR_QUALIFIED_VENDOR_FILE' AND f.attachment_id = fa.attachment_id AND f.table_pk_value = cur.atm_line_id; if v_atm_count > 1 then v_atm_type := cur.atm_type_desc; raise e_atm_count_error; end if; end loop;
这段代码是一个循环,通过查询语句获取一组符合条件的记录,并对每条记录进行处理。循环中的代码主要是查询附件数量,并根据数量进行判断和处理。
首先,使用SELECT语句查询满足条件的记录,并将结果存储在游标cur中。查询语句中嵌套了一个子查询,用于获取atm_type的描述信息。
接下来,使用SELECT COUNT(1)语句查询附件数量,并将结果存储在变量v_atm_count中。查询条件为f.table_name='PUR_QUALIFIED_VENDOR_FILE',f.attachment_id=fa.attachment_id,f.table_pk_value=cur.atm_line_id。这个查询语句会统计满足条件的附件数量。
然后,通过if语句判断v_atm_count的值是否大于1。如果大于1,表示附件数量超过限制,将cur.atm_type_desc赋值给v_atm_type,并抛出异常e_atm_count_error。
最后,循环继续,处理下一条记录,直到所有记录被处理完毕。
阅读全文