删除单链表L中p所指向结点的前驱结点。程序不会写,想请大家帮我想想怎么解释
思路:遍历单链表,判断指针的下下个节点是否和p相同,相同就删除下个节点,下面是一个简单的示例:
struct NodeList{
int item;
struct NodeList *next;
};
void rmPrev(struct NodeList* L, struct NodeList *p){
struct NodeList* temp = L;
while(temp->next != NULL){
if (temp->next->next == NULL)break;
else if(temp->next->next == p){
temp->next = p;
break;
}
}
}
void deletePredecessor(ListNode *L, ListNode *p) {
if (L == NULL || p == NULL || L->next == NULL) {
return;
}
ListNode *pre = L;
ListNode *cur = L->next;
while (cur != NULL) {
if (cur == p) {
pre->next = cur->next;
free(cur);
return;
}
pre = cur;
cur = cur->next;
}
}
void deletePredecessor(ListNode *Head, ListNode *p) {
ListNode *pre = Head;//前驱的前驱
ListNode *q;//要删除的前驱节点
while (pre != NULL && pre->next !=NULL) {
if (pre->next->next == p) {
q=pre->next;
pre->next = p;
free(q);
break;
}
pre = pre->next;
}
}
这里没有判断p的前驱是head的可能,如果head里也能存数据,删起来会很麻烦