C++删除链表中的素数

C++删除链表中的素数_第1张图片
题目要求:
函数deletesushu删除head指向的链表中data值为素数的结点并返回删除结点后的新链表。例如链表8->7->5->3->2->9->6->4->1->0删除data值为素数得到的链表为:8->9->6->4->1>0。请实现该函数。
说明:
素数必须大于等于2。 (样例输入第一行为链表节点个数,第二行为从右至左的链表,样例输出为从左至右的链表)

样例输入: 5 5 4 3 2 1 样例输出: 4 1

题目作答

#include 
using namespace std;

struct ListNode
{
    int data;
    ListNode *next;
};

ListNode *deletesushu(ListNode *head)
{
ListNode *p, *q;
int temp,j;
bool flag;
if(head==NULL)
return NULL;
else
{
       p=q=head;
	   while(p!=NULL)
	   {      
                  temp=p->data;
                  flag=true;
                  if(temp<=1)
                    flag=false;
                  else
                  {
                    for(j=2;j<temp;j++)
                     if(temp%j==0)
                     {
                       flag=false;
                       break;
                     }    
                   }
		   if(flag==true)
		   {
			   if(p==head)
			   {
				   head=head->next;
				   delete p;
				   p=head;
			   }
			   else
			   {
				   q->next=p->next;
				   delete p;
				   p=q->next;
			   }
		   }
		   else
		   {
			   q=p;
			   p=p->next;
		   }

	   }
	}
    return head;

}
int main()
{
    struct ListNode *head=NULL,*t;
    int a[10]={0,1,4,6,9,2,3,5,7,8};
    for(int i=0;i<10;i++)
    {
        t=new ListNode;
        t->data=a[i];
        t->next=head;
        head=t;
    }
    head = deletesushu(head);
    t=head;
    while(t)
    {
        cout<<t->data<<" ";
        t=t->next;
    }
    cout<<endl;
    return 0;
}

你可能感兴趣的:(c++程序设计)