今天又仔细的学习了链表,弄明白了一点。尝试了一下链表的删除。
自己给自己出的题:
持续输入一个整数直到输入-1结束,再输入一个整数a,删除等于a的所有数,再输出出来。
例如:
输入:
9 8 6 4 7 47 83 -1 4
输出:
9 8 6 7 47 83
要求:使用链表,使用链表函数。
#include<stdio.h>
#include<stdlib.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct List
{
struct ListNode *head;
};
void add(struct List *plist,int);
void deleteNode(struct List* plist, int val);
int main()
{
int n;
struct List list;
list.head=NULL;
do
{
scanf("%d",&n);
if(n!=-1)
{
add(&list,n);
}
}while(n!=-1);
int s;
scanf("%d",&s);
struct ListNode *p;
deleteNode(&list,s);
for(p=list.head;p;p=p->next)
printf("%d ",p->val);
return 0;
}
void deleteNode(struct List* plist, int val)
{
struct ListNode *q,*p;
for(q=NULL,p=plist->head;p;q=p,p=p->next)
{
if(p->val==val)
{
if(q)
q->next=p->next;
else
plist->head=p->next;
}
}
}
void add(struct List *plist,int num)
{
struct ListNode *p=(struct ListNode *)malloc(sizeof(struct ListNode));
p->val=num;
p->next=NULL;
struct ListNode *last=plist->head;
if(last)
{
while(last->next)
{
last=last->next;
}
last->next=p;
}
else
{
plist->head=p;
}
}
明天学习链栈,感觉难度开始上升了,希望我能跟的上队伍吧。
栈算法的题组也开了,争取快点做完。
越来越忙了,也更要加油学了啊。