单链表[建表、输出、插入、删除、逆序]

来源:互联网 发布:阿里云子账号登录 编辑:程序博客网 时间:2024/06/04 18:07

面试的时候老是被问到单链表知识,索性总结一下。

这篇文章主要总结了单链表的创建、输出、逆序、插入和删除。


逆序原理图



源代码:

#include <iostream>using namespace std;typedef int ElemType;//数据类型模板typedef struct Node//结点{ElemType data;struct Node *next;}Node;typedef struct Node * LinkList;//////////建表Node* creat_Link(Node *head){int x;Node *p,*q;head=(Node *)malloc(sizeof(Node));head->next=NULL;q=head;cin>>x;    while(x!=999){   p=(Node *)malloc(sizeof(Node));         p->data=x;p->next=NULL;        q->next=p;        q=p;cin>>x;}return head;//建完表后返回头结点}//////////输出void output_Link(Node * head){ if(head==NULL){cout<<"空链表!"<<endl;return;}Node *q;q= head->next;while(q!=NULL){cout<<q->data<<" ";q=q->next;}}//////////逆序Node * reverse_Link(Node * head){Node *current,*p;if(head==NULL){cout<<"空链表!"<<endl;return NULL;}current=head->next;while(current->next != NULL){p=current->next;current->next = p->next;p->next = head->next;head->next = p;}return head;}//////////插入Node * insert_Link(Node *head,int i, ElemType e)//i位置前插入值e{Node *q,*iq;q= head->next;for(int j=1;j<i;j++){iq=q;q=q->next;} Node *s;//在iq处插入S节点//s=(LinkList)malloc(sizeof(Node)); //生成新节点 s=(Node *)malloc(sizeof(Node)); s->data=e;s->next=iq->next;iq->next=s; return head;}//////////删除Node * delete_Link(Node *head,int i)//删除位置i{if(i==1)head = head ->next; else{Node *p,*q;q= head->next;for(int j=1;j<i;j++){   p=q;q=q->next;//找出删除的q位置}p->next=q->next;delete q;//free(q);}return head;}int main(){Node *head=NULL;//creat_Link(head);Node * m=creat_Link(head);//建表cout<<"初始链表为:"<<endl;output_Link(m);//输出原链表cout<<endl<<"逆序链表为:"<<endl;Node * n=reverse_Link(m);//逆序output_Link(n);//输出逆序链表cout<<endl<<"插入输出为:"<<endl;Node * x=insert_Link(n,3,100);//下标1开始,3前插入100output_Link(x);cout<<endl<<"删除输出为:"<<endl;Node * y=delete_Link(n,2);//下标1开始,删除2位置的结点output_Link(y);cout<<endl;return 0;}


测试结果:



0 0