链表(1)

来源:互联网 发布:hibernate访问数据库 编辑:程序博客网 时间:2024/06/04 19:05

一、有一个整数val,如何在节点值有序的环形链表中插入一个节点值为val的节点,并且保证这个环形单链表依然有序。
给定链表的信息,及元素的值A及对应的nxt指向的元素编号同时给定val,请构造出这个环形链表,并插入该值。
测试样例:
[1,3,4,5,7],[1,2,3,4,0],2
返回:{1,2,3,4,5,7}

struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) : val(x), next(NULL) {}};class InsertValue {public:    ListNode* insert(vector<int> A, vector<int> nxt, int val) {        //如果A为空,插入后的结点,自己指向自己        if(A.size()==0){            ListNode *node=new ListNode(val);            node->next=node;            return node;        }        //A不为空,创建一个链表        ListNode *head=new ListNode(A[0]);        ListNode *h1=head;        for(int i=1;i<A.size();i++){            h1->next=new ListNode(A[i]);            h1=h1->next;        }        h1->next=NULL;        //从头结点开始寻找        ListNode *pre=head,*cur=head->next;         //如图val小于头结点的数据域,将结点插入到头结点之前,并令插入的结点为头结点        if(pre->val>=val){            ListNode *node=new ListNode(val);            node->next=head;            head=node;            return head;        }        //如果结点cur不为空,并且val在结点pre和cur的数据域之间,将结点插入结点pre和cur之间        while(cur!=NULL){            if(pre->val<=val&&val<=cur->val){                ListNode *node=new ListNode(val);                pre->next=node;                node->next=cur;                break;            }            pre=pre->next;            cur=cur->next;        }        //如果结点cur为空结点,将val插入到结点pre之后        if(cur==NULL){            ListNode *node=new ListNode(val);            pre->next=node;            node->next=NULL;        }        return head;    }};

二、实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。
给定带删除的头节点和要删除的数字,请执行删除操作,返回删除后的头结点。链表中没有重复数字

struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) : val(x), next(NULL) {}};class Remove {public:    ListNode* removeNode(ListNode* pHead, int delVal) {        //第一种情况:删除的节点是头节点        if(pHead->val == delVal){            ListNode *node = pHead->next;            pHead->next = NULL;            return node;        }        ListNode *pre = pHead;        ListNode *cur = pHead->next;        while(cur != NULL)            {            //如果要删除的值为cur            if(cur->val == delVal)                {                //就用cur的下一个值去覆盖当前值                pre->next = cur->next;                cur->next = NULL;            }            pre = pre->next;            cur = cur->next;        }        return pHead;    }};
原创粉丝点击