华为oj 从单向链表中删除指定值的节点

系统显示结果错误,但是自己测试的例子得到的结果是正确的
2 5 4 1 是最后的结果 
#include<iostream>
#include<stdlib.h>
using namespace std;

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

extern void printLink(ListNode *head);

void buildLink(ListNode* head,int sum)
{
	int value,position;
	while(--sum)
	{
	   cin>>value>>position;
	   //cout<<value<<position<<endl; 
	   ListNode *p = head;
	   while(p!= NULL)
	   {
	   	    if(p->num == position)
	   	    {
	   	    	//插入到p的后面 
	   	    	ListNode *temp = (ListNode*)malloc(sizeof(ListNode));
	   	    	temp->num = value;
	   	    	temp->next = p->next;
	   	    	p->next = temp;
	   	    	break; 
	   	    }
	   	    else
			   p = p->next; 
	   }
    }
    //printLink(head);
}

void deleteLink(ListNode* list,int devalue)
{
	 ListNode *p = list->next;
	 ListNode *q = list;
	 while(p!= NULL)
	 {
	      if(p->num == devalue)
	      {
	      	  q->next = p->next;
			  break;
	      }
	      else
	       {
	       	  q = p;
	          p = p->next;
	       }
	 }
	 printLink(list->next);
}

void printLink(ListNode* head)
{
	ListNode *p = head;
	 while(p->next)
	 {
	      cout<<p->num<<" ";
	      p = p->next;
	 }
	 cout<<p->num<<endl;
}

int main()
{
    ListNode *head = (ListNode*)malloc(sizeof(ListNode));
    ListNode *list = (ListNode*)malloc(sizeof(ListNode));
    head->next = NULL;
    list->next = head;
    int sum = 0;
    cin>>sum;
    //cout<<sum<<endl;
    cin>>head->num;
    //cout<<head->num;
    buildLink(head,sum);
    int devalue;
    cin>>devalue;
    deleteLink(list,devalue);
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值