题目
编写从给定的带头结点的单链表L中删除第一个值为x的元素的算法。 typedef srtuct Node ( ElemType data; struct Node *next; )LNode, *LinkList; void Delete-x(LinkList &L, ElemType x);
编写从给定的带头结点的单链表L中删除第一个值为x的元素的算法。 typedef srtuct Node { ElemType data; struct Node *next; }LNode, *LinkList; void Delete-x(LinkList &L, ElemType x);
题目解答
答案
参考代码: void Delete-x(LinkList &L, ElemType x) { LNode *p=L,*q; While(p->next!=NULL&&p->next->data!=x) p=p->next; if(p->next!=NULL) { q=p->next; p->next=q->next; delete q; } }
解析
步骤 1:定义函数
定义一个函数 `Delete-x`,它接受一个指向带头结点的单链表的指针 `L` 和一个元素值 `x` 作为参数。
步骤 2:初始化指针
初始化一个指针 `p` 指向链表的头结点 `L`,并定义一个指针 `q` 用于删除操作。
步骤 3:遍历链表
使用一个循环遍历链表,直到找到值为 `x` 的结点或链表结束。
步骤 4:删除结点
如果找到了值为 `x` 的结点,使用指针 `q` 指向该结点,并将 `p` 的 `next` 指针指向 `q` 的 `next`,从而删除结点 `q`。
步骤 5:释放内存
释放结点 `q` 占用的内存。
定义一个函数 `Delete-x`,它接受一个指向带头结点的单链表的指针 `L` 和一个元素值 `x` 作为参数。
步骤 2:初始化指针
初始化一个指针 `p` 指向链表的头结点 `L`,并定义一个指针 `q` 用于删除操作。
步骤 3:遍历链表
使用一个循环遍历链表,直到找到值为 `x` 的结点或链表结束。
步骤 4:删除结点
如果找到了值为 `x` 的结点,使用指针 `q` 指向该结点,并将 `p` 的 `next` 指针指向 `q` 的 `next`,从而删除结点 `q`。
步骤 5:释放内存
释放结点 `q` 占用的内存。