#include <stdio.h>
#include <stdlib.h>
struct Node
{
int nValue;
struct Node* next;
};
void DeleteRandomNode(struct Node* pCurrent)
{
if(pCurrent == NULL)
{
exit(0);
}
struct Node* pNext = pCurrent -> next;
if(pNext != NULL)
{
pCurrent -> next = pNext-> next;
pCurrent -> nValue = pNext -> nValue;
free(pNext);
}
}
struct Node *create()
{
struct Node *head, *p, *q;
int n;
head = (struct Node *)malloc(sizeof(struct Node));
head->next = NULL;
p = head;
while(1)
{
printf("输入链表的值(0退出):");
scanf("%d",&n);
if(n == 0)
{
break;
}
else
{
q = (struct Node *)malloc(sizeof(struct Node));
q->nValue = n;
q->next = NULL;
p->next = q;
p = q;
}
}
return head;
}
//显示链表
void disp(struct Node *h)
{
struct Node *p = h->next;
printf("输出链表:");
if(p == NULL)
{
printf("空表\n");
}
else
{
while(p->next != NULL)
{
printf("%d ", p->nValue);
p = p->next;
}
printf("%d\n", p->nValue);
}
}
struct Node* locate(struct Node* head, int n)
{
struct Node *p = head -> next;
while(p != NULL && p -> nValue != n)
{
p = p -> next;
}
return p;
}
int main()
{
struct Node * head = (struct Node*)malloc(sizeof(struct Node));
//创建链表
head = create();
//显示链表
disp(head);
struct Node * thelocate = (struct Node*)malloc(sizeof(struct Node));
//找到链表节点
thelocate = locate(head, 6);
printf("thelocate = %d", thelocate -> nValue);
//删除无头链表节点
DeleteRandomNode(thelocate);
//删除节点后重新显示链表
disp(head);
return 0;
}