/** * 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; }
数据结构--链表操作
猜你喜欢
转载自blog.csdn.net/qq_41037075/article/details/104675206
今日推荐
周排行