删除p节点的直接前驱 实现在循环单链表中删除某个节点p的前驱节点
实现在循环单链表中删除某个节点p的前驱节点
int delprior(LinkList p){
LinkList q=p,r
if(q->next==p) return ERROR
else{
while(q->next->next!=p)q=q->next
r=q->next
q->next=r->next
free(r)
return TRUE
}}
怎么找到要删除结点的前驱结点
typedef struct node {
int data
struct node *next
}
//找到返回true,否则返回false,其中pre是指向存储前一结点地址的指针
//若是头结点则*pre为NULL,因为头结点无前驱结点。
//您要的查找2的调用例子如下,head为链表的首结点指针:
// Node *pre = NULL
// if (getPreNode(head, &pre, 2))
// 找到了,pre即指向2的前驱结点
// else
// 没找到
bool getPreNode(Node *head, Node **pre, int findvalue)
{
*pre = NULL
if (head == NULL)
return false
if (head->data == findvalue)
return true
*pre = head
while((*pre)->next != NULL)
{
if ((*pre)->next->data == findvalue)
return true
*pre = (*pre)->next
}
return false
}