题目:
链表L中可能存在一个值为x的结点,设计一个函数,删除这个可能存在的结点。
代码:
void searchAnddelete(LNode *L,int x){//假设单链表带头结点LNode *pre=L,*p=L->next,*q;while(p){if(p->data==x){q=p;p=p->next;pre->next=p;free(q);}else{pre=p;p=p->next;}}
}
测试:
#include<stdio.h>
#include <stdlib.h>
#include<math.h> //数学函数,求平方根、三角函数、对数函数、指数函数...//定义常量 MAXSIZE
#define MAXSIZE 15//用于使用c++的输出语句
#include<iostream>
using namespace std;typedef struct LNode{int data;struct LNode *next;
}LNode;void searchAnddelete(LNode *L,int x);
void createList(LNode *&L,int arr[],int length);
void printList(LNode *L);void main(){int a[]={1,3,50,7,9};int x=3;LNode *L=new LNode();L->next=NULL;createList(L,a,5);printList(L);cout<<endl;searchAnddelete(L,x);printList(L);cout<<endl;
}void searchAnddelete(LNode *L,int x){//假设单链表带头结点LNode *pre=L,*p=L->next,*q;while(p){if(p->data==x){q=p;p=p->next;pre->next=p;free(q);}else{pre=p;p=p->next;}}
}void createList(LNode *&L,int arr[],int length){LNode *q=L;//q指向末尾结点for(int i=0;i<length;i++){LNode *node=new LNode();//创建一个新结点node->data=arr[i];//将数组元素的值放入新创建的结点中q->next=node;//将新结点接到链表后面q=q->next;//将q后移到末端}q->next=NULL;//这是一个好习惯
}void printList(LNode *L){LNode *p=L;//p为循环遍历指针while(p->next){cout<<p->next->data<<"\t";p=p->next;}
}