这是一个类似脑筋急转弯的题目,常规方法是直接将节点删除然后再将前面一个节点和后面的节点接上。但是由于本题目中的链表没有头,所以必然不是用这个方法。本题的技巧在于:只需要将当前节点的数据替换成后面一个节点的数据,然后将该节点后面一个节点删除即可。
#include<stdio.h>
typedef struct List{int n;
struct List *next;
}ListNode,*List;
void DeleteRandomNode(List p);
void main(){
ListNode *head,*p,*t;
head=(ListNode*)malloc(sizeof(ListNode));
head->next=NULL;
head->n=-1;
int i;
t=head;
for(i=1;i<10;i++)
{
p=(ListNode*)malloc(sizeof(ListNode));
p->n=i;