单链表的相关操作

来源:互联网 发布:网络传销崩盘前兆 编辑:程序博客网 时间:2024/05/31 13:16

最近复习数据结构的时候,复习到了链表,把王道上的关于链表的基本操作敲了一遍,当是复习巩固,记录在此,没准以后能用得到。

//结点类型typedef struct LNode{    int data;    struct LNode *next;}LNode,*LinkList;
//前插法建立单链表LinkList CreateList1(LinkList &L){    LNode *p,*head = new LNode;    int val = 0;    head->data = -1;    //头结点的数据为-1    head->next = NULL;    cin>>val;  do  {      p = new LNode();      p->data = val;      p->next = head->next;      head->next = p;      cin>>val;  }while(val != 9999);      //当输入的元素9999 时,表示输入结束  L = head;  return L;}
//尾插法建立单链表LinkList CreateList2(LinkList &L){    L = new LNode;      //建立头结点    L->data = -1;    L->next = NULL;    LNode *temp = NULL,*rear = L;    int val;    cin>>val;    while(val != 9999)    {        temp = new LNode;        temp->data = val;        temp->next = NULL;        rear->next = temp;        rear = temp;        cin>>val;    }    return L;}
//获得指定位置的结点LNode* GetElem(LinkList L,int pos){    LNode *p = L;    int i = 0;      //用来计数    while(p != NULL)    {        if(i < pos)        {            p = p->next;            ++i;        }        else            break;    }    //cout<<"p:"<<p<<endl;    //如果输入不合法则,返回失败    if(i != pos || p == NULL)    {        cout<<"pos is wrong!!!\n"<<endl;        exit(-1);    }    return p;}
//在给定的单链表中查找指定元素,返回结点LNode* LocateElem(LinkList L,int x){    LNode *p = L;    while(p != NULL)    {        if(x == p->data)            return p;        p = p->next;    }    cout<<"Can Find the x and Return NULL"<<endl;    return NULL;}
//在指定位置插入指定元素void InsertElem(LinkList &L,int x,int pos){    LNode * p = new LNode;    p->data = x;    LNode * pre = GetElem(L,pos-1);     //获取第pos的前一个位置的元素指针    if(pre != NULL)    {        p->next = pre->next;        pre->next = p;    }}
//删除指定位置的元素void DeleElem(LinkList &L,int pos,int &e){    LNode * pre = GetElem(L,pos-1);    LNode *p = pre->next;    if(p == NULL)       //如果p为空,则代表删除的是最后一个元素后面的一个元素,删除失败    {        // e = -1;         cout<<"pos is wrong!!!"<<endl;         exit(-1);    }    else        e = p->data;       //将删除元素返回,    pre->next = p->next;    delete p;}
//返回表的长度,int  GetLength(LinkList &L){    int length  = -1;    LNode *p = L;    while(p != NULL)    {        p = p->next;        ++length;    }    return length;}
原创粉丝点击