滴滴一面题目:删除链表中(不带头结点)值为value的结点,返回删除的个数
//删除链表中某个元素(不带头结点)
typedef struct LinkNode
{
int val;
LinkNode* next;
}*LinkList;
void CreateList(int* a, int n, LinkList head)
{
LinkList p = head;
LinkList s = NULL;
for (int i = 1; i < n; ++i)
{
s = (LinkList)malloc(sizeof(LinkNode));
s->val = a[i];
s->next = NULL;
p->next = s;
p = p->next;
}
p->next = NULL;
}
void printList(LinkList head)
{
LinkList p = head;
while (p != NULL)
{
cout << p->val << ",";
p = p->next;
}
cout << endl;
}
int deleteNode(LinkList& head, int value)//注意,这个head前面的引用地址符不能丢
{
LinkList p = head,del=NULL,tmp=NULL,q=NULL;
int first = 1;
int count = 0;
while (p != NULL)
{
if (p->val == value)
{
if (first == 1)
{
del = p;
p = p->next;
tmp = p;
free(del);
}
else
{
q->next = p->next;
p = q->next;
}
count++;
}
else
{
q = p;
p = p->next;
first = 0;
}
}
head = tmp;
return count;
}
void main()
{
LinkList head=NULL,s=NULL;
int a[] = { 2,2, 2, 27 };
int n = sizeof(a) / sizeof(a[0]);
cout << n << endl;
s = (LinkList)malloc(sizeof(LinkNode));
s->val = a[0];
s->next = NULL;
head = s;
cout << head << ",,,,,,," << s << endl;
cout << &head << ",,,,," << &s << endl;
cout << *(&head) << endl;
CreateList(a,n,head);
cout << 1 << endl;
printList(head);
int value = 2;
int count = deleteNode(head,value);
cout << endl << count << endl;
printList(head);
}