单链表删除第i个元素
答:建立一个带头结点的单链表,删除其中的第i个元素:这个头节点是一个空节点(不存储数据),仅作标志用。先假设是单向非循环列表。void deleteNode(Node * head, int i)//删除第i个节点,head是第一个节点指针。{ Node * temp=head;for(int j=1;j<i;j++){ if(!temp->next) //到达链表...
答:void CreateList_L(LinkList &L,int n){ int i;LinkList p;L=(LinkList)malloc(sizeof(LNode));L->next=NULL;for(i=n;i>0;i--){ p=(LinkList)malloc(sizeof(LNode));cout<<"输入第"<<i<<"节点值";cin>>p->data;p->next=L->next;L->next=p;} } 2,删除链表,i删除...
答://tmp指向第i + k个结点 tmp = pre->next;//删除第i + k个结点 pre->next = pre->next->next;free (tmp);//返回链表的头结点 tmp = newHead->next;free(newHead);return tmp;}
答:1. 考虑单链表具有n个节点的情况,删除第i个节点的后继的时间复杂度是O(n)。2. 这是因为在最坏的情况下,需要找到指定节点的前驱,这需要访问前n-1个节点,以便能够更新第i个节点的指针,从而删除其后继。3. 具体来说,存在一个for循环,其条件为i<n,这意味着循环将执行n-1次。4. 在每次...
答://删除节点 删除第i个节点int Delete_Positon_LL(LinkList *phead,int i){LinkList p,q;//p为值是x的节点,q是p的前一个节点int j;if((*phead)->next == NULL)//如果链表为空,做下溢处理{printf("单链表为空!\n");return 0;}if(i == 1) //如果是表头,表头后移{ p=(*phead)...
答://删除第i个节点,head是第一个节点指针。{ Node * temp=head;for(int j=1;j<i;j++){ if(!temp->next) //到达链表末端 {cout<<"不存在该节点";break;} temp=temp->next;} //temp指向第i-1个节点 temp->next=temp->next->next;//第i-1节点的下个节点变为第i+1个节点 } ...
答:if(NULL == start)//个数小于i return;last = start;while((NULL != last) && (--k > 0))last = last->next;if(NULL == last)//不足k个 return;last = last->next;//删除start至last之前的k个结点 pre->next = last;while(start != last){ LNode *del = start;start = ...
答:单链表的删除操作是指删除第i个结点,返回被删除结点的值。删除操作也需要从头引用开始遍历单链表,直到找到第i个位置的结点。如果i为1,则要删除第一个结点,则需要把该结点的直接后继结点的地址赋给头引用。对于其它结点,由于要删除结点,所以在遍历过程中需要保存被遍历到的结点的直接前驱,找到第i...
答:int listdelete(linklist &l,int i)//在带头节点的单链表中删除第i个元素e,并返回其值 { int j=0;linklist p;p=new lnode;p=l;while(p->next&&j<i-1){ p=p->next;++j;} if(!(p->next)||j>i-1){return 0;} linklist q;q=new lnode;q=p->next;p->next=q->next;m...
答:// 首先head定位到A的第一个元素,p定位到A的第i个元素,// q定位到p之前的元素(即i-1),end定位到A的最后一个元素 // for n=1;n<length;n++ // { // if (p!=NULL)// { p=p->next;// q->next=p;// } // else break;// } // // 然后s定位到B...
网友评论:
项向15025198596:
单链表怎么删第一个元素 -
67178狄树
: 采用头指针单链表:头指针为head ,结构类型为 ListList *head; #define TRUE 1 #define FALSE 0int DeleFirst(List *head) {List *tmp;if (head==NULL) return FALSE; tmp=head->next;if (tmp==NULL)head=NULL ;elsehead=tmp->next ; free(tmp);return TRUE;}
项向15025198596:
基于单链表写出算法,删除等于给定值的第一个元素 -
67178狄树
: bool DeleteList(LNode* &L,ElemType &item) { if(L==NULL) //单链表为空 { cout<<"单链表为空,删除无效"<<endl; return false; }//寻找被删除的元素结点 LNode* cp=L; //cp指向待删除的结点,初始指向表头 LNode *ap=NULL; //zp指向cp的前驱...
项向15025198596:
设计在无结点的单链表中删除第i个结点的算法 -
67178狄树
: #include <stdio.h> #include <stdlib.h>typedef struct Link { int num ; struct Link *next; }L;void link( struct Link * head) //链表逆序 { L *p, *q ,*temp, *temp2 ; p = head ; temp2 = q = head->next ; while (q!=NULL) { temp = q->next ; q -> next = p; p = q ; ...
项向15025198596:
创建一个单链表,输出该单链表,然后删除第i位上元素,若删除成功,输出新的单链表,否则输出“无法删除"
67178狄树
: #include <stdio.h>#include <stdlib.h>typedef struct node { int num; node* next;}node,*link;void creat(link &head){link p,q; head=new node[sizeof(node)]; q=head; int i=1; do {p=new node[sizeof(node)]; printf("请输入第%d个数:"...
项向15025198596:
顺序表的删除算法 -
67178狄树
: 单链表的删除操作是指删除第i个结点,返回被删除结点的值.删除操作也需要从头引用开始遍历单链表,直到找到第i个位置的结点.如果i为1,则要删除第一个结点,则需要把该结点的直接后继结点的地址赋给头引用.对于其它结点,由于要...
项向15025198596:
写一个算法:删除单链表中自第i个元素起的loungth个元素 -
67178狄树
: typedef struct _LNode {int data;struct _LNode *next; }LNode, *LinkList;void DelNodes(LinkList head, int i, int k) {if(i>0 && k>0){LNode *pre = head, *start = head->next, *last;while((NULL != start) && (--i > 0)){pre = start;start = start->next;} ...
项向15025198596:
单链表中删除第一个结点的算法 -
67178狄树
: 头结点是第一结点,只是一般没有数据头结点后面是首元结点,即第一个存放数据的结点做删除操作时,一般需要返回所删除结点的数据,所以一般不删除头结点如果你执意要删的话,当然也可以,因为链表分为有头结点的链表和无头结点的链表
项向15025198596:
单链表删除指定元素操作 -
67178狄树
: 按照LZ写的...已经测试过··能用···看看··大概思路可以这样Status DeleteElem(Sqlist *p) {int j=1;int i=0;int n, flag =1; printf("请输入你要删除的元素:\n");scanf("%d",&n);while(1){j=1; p->elem=p->t;for(;p->elem<p->t+...
项向15025198596:
删除单链表中第i个节点,用e返回被删除的元素 -
67178狄树
: #include "stdio.h"#include "stdlib.h"#define OK 1#define ERROR 0typedef int ElemType;typedef int Status;typedef struct Lnode { ElemType data; struct Lnode *next;}Lnode,*LinkList;//以下是建立单链表void creatlist(LinkList &head){ //请将...
项向15025198596:
C++不带头节点的单链表删除第一个元素引起错误了 -
67178狄树
: 思路: 首先判断p结点是否是L所指的结点,如果是的就改变L,如果不是的就不要改变L.伪代码:void Delete(LinkList L){ if(p==L){ L=L->next; free(p); } else{//假设要删除结点的前趁为q; r=p; q->next=p->enxt; free(r); } } 谢谢!!