/*
已知一个单向链表的头,请写出删除其某一个结点的算法,
要求,先找到此结点,然后删除。
*/
#include <cstdio>
#include <deque>
#include <algorithm>
#include <iterator>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <assert.h>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode;
LNode *CreatLink(int num) // 构造
{
int i=1;
LNode *head, *tail, *p;
head = (LNode *)malloc(sizeof(LNode));
tail = head;
while (num--)
{
p = (LNode *)malloc(sizeof(LNode));
p->data = i;
tail->next = p;
tail = p;
i++;
}
tail->next = NULL;
return head;
}
LNode *FindLink(LNode *head,int X) //查找
{
assert( head != NULL);
LNode *chick=head->next;
while (chick != NULL)
{
if (chick->data == X)
return chick;
else
chick = chick->next;
}
return NULL;
}
void DeleteLink(LNode *head, int X)
{
assert(head != NULL);
LNode *p;
LNode *q;
p=FindLink(head, X);
q = p->next;
p->data = q->data;
p->next = q->next;
free(q);
}
int main()
{
LNode *head = CreatLink(50);
DeleteLink(head, 5);
system("pause");
return 0;
}