条件
- 链表是否为空(p判断)
- 是否遍历完全(p判断)
- 是否是首节点(用pre判断)
过程
- 用循环判断是否为空和是否遍历完全(感觉这两个是同一句)
- 判断是否为首节点,进行不同操作
- p指向点回溯
p=pre
- 防止因为是首节点,而跳出循环等同于
++i
需要考虑条件
我感觉这里的衔接是有点难度的,再让我写可能写得还是很艰难
代码
void LinkList::deletenode2(int value) {
Node* pre = 0; Node* p = pHead;
for (; p;) {
if (p->data == value) {
if (pre) {//判断是否是首节点
pre->next = p->next;
}
else {
pHead = p->next;//重新设置头指针
}
delete p;
p = pre;
}
if (p) {//防止因为是首节点,而跳出循环
pre = p;
p = p->next;
}
else p=pHead;
}
}