思路:
在无法得到前驱结点的情况下删除某个指定结点,将后继结点的值赋给要删除的结点,然后删除这个后继元素即可。
这也是一种删除方法,但用的少。
代码:
void deleteNode(LNode*&p){//待删除结点pLNode *q=p->next;p->data=q->data;p->next=q->next;free(q);
}
测试:
#include<stdio.h>
#include <stdlib.h>
#include<math.h> //数学函数,求平方根、三角函数、对数函数、指数函数...#define MAXSIZE 15//用于使用c++的输出语句
#include<iostream>
using namespace std;typedef struct LNode{int data;struct LNode *next;
}LNode;void createList(LNode *&L,int arr[],int length);
void printList(LNode *L);
void deleteNode(LNode *&p);void main(){int a[]={1,2,3,4,5};LNode *L=new LNode();L->next=NULL;createList(L,a,5);printList(L);cout<<endl;LNode *p=L->next->next;//p指向元素值为2的结点deleteNode(p);printList(L);
}//删除还有一种方法但是比较少用
void deleteNode(LNode*&p){LNode *q=p->next;p->data=q->data;p->next=q->next;free(q);
}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;}
}