有一个非空双链表L,设计一个算法在第i个结点之前插入一个值为x的结点。
bool InsertBeforei(DLinkList *&L,int i,ElemType x){ DLinkList *p=L->;next,*s; int j=1; if (i<;1) return false; while (p!=NULL && j<;i) //查找第i个结点 { j++; p=p->;next; } if (p==NULL) //没有找到第i个结点返回false return false; s=(DLinkList *)malloc(sizeof(DLinkList)); s->;data=x; //在*p结点之前插入新结点 p->;prior->;next=s; s->;prior=p->;prior; s->;next=p; p->;prior=s; return true;}
举一反三
- 在n个元素的线性表的数组表示中,时间复杂度为O(1)的操作是()。 A: 删除第i个结点 B: 在最后一个结点后插入一个新值 C: 访问第i(1<i<n)个结点和求第i(2<i<n)个结点的直接前驱 D: 在第i(1<i<n)个结点后插入一个结点
- 不带头结点的单链表L有100个结点,在L的第一个位置之前插入一个结点,需要移动____个结点。
- 一个带头指针的单链表,写出在值为x的结点之后插入m个结点的算法。
- 在n个元素的线性表的数组表示中,时间复杂度为O(1)的操作是()。 A: 访问第i(1<i<n)个结点和求第i(2<i<n)个结点的直接前驱 B: 删除第1个结点 C: 在第i(1<i<n)个结点后插入一个结点 D: 在最后一个结点后插入一个新值
- 对于一个具有n个结点的单链表,给定值为x的结点后插入一个新结点的时间复杂度是______
内容
- 0
对于双向链表,在两个结点之间插入一个新结点需修改的指针共(__)个,单链表为 (__)个。
- 1
一含N个元素的顺序表,若在第i个元素之前插入一个元素,需移动____个元素。
- 2
一个具有n个结点的单链表,在指针p所指结点后插入一个新结点的时间复杂度为(__);在给定值为x的结点后插入一个新结点的时间复杂度为(__)
- 3
在下列算法中,时间复杂度是O(1)的操作是( ) A: 在n个结点的顺序表中,访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n) B: 在n个结点的链表中,访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n) C: 在n个结点的顺序表中,删除第i个结点(1≤i≤n) D: 在n个结点的链表中,删除第i个结点(1≤i≤n)
- 4
在单链表中插入结点只需要()。但同时,若要在第()个结点之前插入元素,修改的是第 ()个结点的指针。