每日一练数据结构之链表的操作15

来自:年全国硕士研究生入学统一考试综合应用题部分

题目:

用单链表保存m个整数,节点的结构为(data,link),且

data

例如若给定的单链表head如下:

删除节点后的head为:

要求

  (1)给出算法的基本思想

  (2)使用c或c++语言,给出单链表节点的数据类型定义。

  (3)根据设计思想,采用c或c++语言描述算法,关键之处给出注释。

  (4)说明所涉及算法的时间复杂度和空间复杂度。

(1)算法思想:

  定义一个大小为N的数组,初始化为0.在遍历链表的同时将数组中索引值为节点的值的绝对值的元素置1.如果此元素已经为1,说明此节点之前已经有与此节点的值的绝对值相等的节点,需将此节点删除。

(2)节点的数据结构定义如下:

 typedefstructNode   {   Intdata;   StructNode*next;   }Node;

(3)

inta[n];//全局数组标志节点的绝对值的值是否出现过   voidDeleteABSEqualNode(Node*head)   {   memset(a,0,n);//初始化为0   if(head==NULL)   {   returnNULL;   }   Node*p=head;   Node*r=head;   while(p!=NULL)   {   if(a[abs(p-data)]==1)//如果此绝对值已经在节点值的绝对值中出现过   {//则删除当前节点   r-next=p-next;   deletep;   p=r-next;   }   else//否则,将数组中对应的元素置1,并将指针指向下一个元素   {   a[abs(p-data)]=1;   r=p;   p=p-next;   }   }   returnhead;   }

(4)只遍历一次链表,所以时间复杂度为O(n),

  因为申请大小为n的数组,所以空间复杂度为O(n),(n为节点绝对值的最大值)。

●编号,输入编号直达本文

●输入m获取文章目录

赞赏

长按







































北京治疗白癜风专科医院在哪
北京有哪些治疗白癜风的医院



转载请注明:http://www.92nongye.com/xxmb/204621232.html