考虑全面的链表插入 - c++

来源:互联网 发布:网上发短信软件 编辑:程序博客网 时间:2024/05/24 06:47

(一)不带头节点的单向链表:

链表插入:struct node{    int data;    node *next;                     };bool insertLinkList(node **head,int pos,int value){//向头指针为head的链表中pos位置处插入值为value的节点        if(pos < 0)//位置判定            return false;     node *ele = new node();      if(!ele)//总是在分配完内存后,检验内存是否分配成功           return false;     ele -> data = value;     if(!(*head) || pos == 0){//如果是空链表或者是在表头插入,需要修改head的值         ele -> next = *head;//先连            *head = ele;//后断         return true;     }     node *p = *head;     int j = 0;     while(j < (pos-1) && p){//p指向pos-1处的节点             j++;             p = p->next;     }     if(!p)           return false;     ele -> next = p ->next;     p -> next = ele;     return true;}测试:     node *head = NULL;//init head      insertLinkList(&head,1,2);//成功插入     insertLinkList(&head,3,2);//超过表长度,插入不成功     insertLinkList(&head,1,2);//成功插入

(二)带头节点的单向链表:

大部分情况下是此类链表,好处:统一了第一位置和其他位置的操作

bool insertLLHeadnode(node *head,int pos,int value){//头节点不算真正的元素节点,pos实际上从第二个节点开始计数,从0开始     if(pos < 0)            return false;         node *p = head;     int j = 0;     while(j < pos && p){             j++;             p = p->next;     }     if(!p)           return false;     node *ele = new node();      if(!ele)           return false;     ele -> data = value;     ele -> next = p ->next;     p -> next = ele;     return true;}

测试:

     node *head = new node();//init head      head->next = NULL;         insertLLHeadnode(head,0,1);     insertLLHeadnode(head,1,2);     insertLLHeadnode(head,2,3);     insertLLHeadnode(head,4,3);     insertLLHeadnode(head,3,11);     viewAllElements(head);输出:1 2 3 11


原创粉丝点击