/**
* 2020 3/5
* 链表
*/
#include<iostream>
using namespace std;
typedef int ElemType;
/**
* 单链表
*/
typedef struct LNode{
ElemType data;
LNode *next;
}LNode,*LinkedList;
/**
* 链表输出
* @param L
*/
void print(LinkedList L){
LNode *p=L->next;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
}
/**
* 头插法建立单链表
* @param L
* @return
*/
LinkedList List_InsertHead(LinkedList &L){
LNode *temp;
int data;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
cin>>data;
while(data!=9999){
temp=(LNode*)malloc(sizeof(LNode));
temp->data=data;
temp->next=L->next;
L->next=temp;
cin>>data;
}
return L;
}
/**
* 尾插法建立链表
* @param L
* @return
*/
LinkedList List_TailInsert(LinkedList &L){
int data;
L=(LNode*)malloc(sizeof(LNode));
L->next=NULL;
LNode *p=L,*q;
cin>>data;
while(data!=9999){
q=(LNode*)malloc(sizeof(LNode));
q->data=data;
p->next=q;
p=q;
cin>>data;
}
p->next=NULL;
return L;
}
/**
* 按位序查找
* @param L
* @param i
* @return
*/
LNode *GetElem(LinkedList L,int i){
LNode *p=L->next;
int j=1;
if(i==0){
return L;
}
if(i<1){
return NULL;
}
while(p&&j<i){
p=p->next;
j++;
}
return p;
}
LNode *LocateElem(LinkedList L,ElemType e){
LNode *p=L->next;
while(p&&p->data!=e){
p=p->next;
}
return p;
}
/**
* 节点插入
* @param L
* @param i
* @param data
*/
void InsertNode(LinkedList L,int i,int data){
LNode *p=GetElem(L,i-1);
LNode *temp=(LNode*)malloc(sizeof(LNode));
temp->data=data;
temp->next=p->next;
p->next=temp;
}
/**
* 节点前插
* @param L
* @param i
* @param data
*/
void InsertNode_Pre(LinkedList L,int i,int data){
LNode *p=GetElem(L,i);
LNode *temp=(LNode*)malloc(sizeof(LNode));
temp->next=p->next;
p->next=temp;
temp->data=p->data;
p->data=data;
}
/**
* 删除操作
* @param L
* @param i
*/
void DeleteLNode(LinkedList L,int i){
LNode *p=GetElem(L,i-1);
LNode *q=p->next;
if(p->next==NULL){
return;
}
p->next=q->next;
free(q);
}
/**
* 删除指定节点
* @param L
* @param i
*/
void DeleteLNode(LinkedList L,LNode *node){
LNode *temp=L->next;
for(;node->data!=temp->data&&node->next!=temp->next;temp=temp->next);
LNode *p=temp->next;
int value=node->data;
node->data=p->data;
p->data=value;
node->next=p->next;
free(p);
}
int main(){
LinkedList list;
List_TailInsert(list);
DeleteLNode(list,GetElem(list,2));
print(list);
return 0;
}