zoukankan      html  css  js  c++  java
  • 链表的相关操作

    #include<iostream>
    using namespace std;
    struct node
    {
        int data;
        node *next;
    };
    //链表的建立,创建有n个结点的链表
    node *create(int n)
    {
        node *head=NULL;
        node *p=NULL;
        head=new node();
        p=head;
        cin>>p->data;
        node *q;
        while(--n)
        {
            q=new node();
            cin>>q->data;
            p->next=q;
            p=q;
        }
        p->next=NULL;
        return head;
    }
    //打印结点
    void print(node *head)
    {
        node *p=head;
        while(p!=NULL)
        {
            cout<<p->data<<" ";
            p=p->next;
        }
        cout<<endl;
    }
    //插入结点
    //在指定位置weizhi上插入结点值为n的结点
    //这里注意返回值不能写成void因为当weizhi为0的时候,head的值变动了,如果不返回head虽然那么原函数中的head还在原来的位置
    node* insert(node *head,int weizhi,int n)
    {
        node *p=NULL;
        if(weizhi<0)
        {
            return 0;
        }
        if(weizhi==0)
        {
            p=new node();
            p->data=n;
            p->next=head;
            head=p;
        }
        if(weizhi>0)
        {
            p=head;
            int num=weizhi;
            while(--num)
            {
                p=p->next;
            }
            node *t=p->next;
            node *q=new node();
            q->data=n;
            p->next=q;
            q->next=t;
        }
        return head;
    }
    //删除第一个值为n的结点
    node *delete_node(node *head,int n)
    {
        if (head==NULL)
        {
            return NULL;
        }
        else if(head->data==n)
        {
            node *p=head;
            head=head->next;
            delete p;
            return head;
        }
        else 
        {
            node *p,*q;
            p=head;
            q=p->next;
            while(q!=NULL && q->data!=n)
            {
                p=p->next;
                q=q->next;
            }
            if(q==NULL)
            {
                return head;
            }
            else 
            {
                p->next=q->next;
                delete q;
                return head;
            }
        }
    }
    //链表的逆转
    node *reverse(node *head)
    {
        node *p=NULL;//指向要逆转指针的前一个结点
        node *r=head;//指向要逆转的结点
        node *q=NULL;//指向要逆转结点的后一个结点
        while(r!=NULL)
        {
            q=r->next;
            r->next=p;
            p=r;
            r=q;
        }
        head=p;     //注意全都逆转之后,结点r已经为NULL,结点p才是最后一个有数据的结点
        return head;
    }
    int main()
    {
        node *head=create(5);
        print(head);
        head=insert(head,2,100);
        print(head);
        head=insert(head,0,1000);
        print(head);
        head=delete_node(head,3);
        print(head);
        head=delete_node(head,5);
        print(head);
        head=delete_node(head,1000);
        print(head);
        head=reverse(head);
        print(head);
        return 0;
    }
  • 相关阅读:
    判断ios版本
    DBL_EPSILON和 FLT_EPSILON的用法
    __bridge,__bridge_retained和__bridge_transfer的意思,区别与使用
    ios俩个APP之间跳转、传值,以及直接跳转到指定app页面 或者 app 评价页面 的方法
    如何参与GitHub开源项目
    第202题:快乐数
    第217题:存在重复元素
    第234题:回文链表
    第242题:有效的字母异位词
    JAVASRIPT
  • 原文地址:https://www.cnblogs.com/bewolf/p/4753236.html
Copyright © 2011-2022 走看看