持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第32天,点击查看活动详情
01.设计一个递归算法,删除不带头结点的单链表L中所有值为×的结点。
void Delete_X(LinkList &L, ElemType x){
LinkList h=L;
while(h && h->data == x){
h = h->next;
}
while(h && h->next){
LNode * p = h->next;
if(p->data == x){
h->next=p->next;
free(p);
}
}
}
02.在带头结点的单链表L中,删除所有值为×的结点,并释放其空间,假设值为×的结点不唯一,试编写算法以实现上述操作。
void Delete_X(LinkList &L, Elemtype x){
while(L->next != NULL){
if(L->next->val == x){
LNode * node;
node = L->next;
L->next = node->next;
free(node);
}
}
}
03.设L为带头结点的单链表,编写算法实现从尾到头反向输出每个结点的值。
void List_Reverse(LinkList &L){
LNode * p=L->next, *q;
while(p){
q = p->next;
p->next = L->next;
L->next = p;
p = q;
}
}
04.试编写在带头结点的单链表L中删除一个最小值结点的高效算法(假设最小值结点是唯一的).
void Delet_Min(LinkList &L){
LNode * p=L;
LNode h=L;
if(!L->next){
return;
}
while(h->next){
if(h->next->data < p->next->data){
p = h;
}
h = h->next;
}
LNode *q=p->next;
p->next=q->next;
free(q);
}
05.试编写算法将带头结点的单链表就地逆置,所谓“就地”是指辅助空间复杂度为O(1).
void ReverseList(LinkList &L){
LNode * p = L->next, *q;
L->next=NULL;
while(p){
q = p->next;
p->next = L->next;
L->next = p;
p = q;
}
}
06.有一个带头结点的单链表L,设计一个算法使其元素递增有序。
void SortList(LinkList &L){
LNode * p = L->next;
while(p){
LNode* h = L;
while(h->next && p->data < h->next->data){
h = h->next;
}
LNode *q=p->next;
p->next = h->next;
h->next = p;
q = p;
}
}
07、设在一个带表头结点的单链表中所有元素结点的数据值无序,试编写一个函数,删除表中所有介于给定的两个值(作为函数参数给出)之间的元素的元素(若存在)。
void Delet_Range(LinkList &L, ElemType lower, ElemType upper){
LNode *h=L, *p=L->next;
while(p){
while(lower <= p->data && p->data <= upper){
h->next = p->next;
free(p)
p=h->next;
}else{
h = h->next;
p = p->next;
}
}
}
08.给定两个单链表,编写算法找出两个链表的公共结点。
LNode * Search_Common_Node(LinkList &A, LinkList &B){
int lengtha = Length(A), lengthb = Length(B);
int length;
LinkList LongList, ShortList;
if(lengtha > lengthb){
length = lengtha - lengthb;
LongList = A;
ShortList = B
}else{
length = lengthb - lengtha;
LongList = B;
ShortList = A;
}
while(length--){
LongList = LongList->next;
}
while(LongList){
if(LongList == ShortList){
return LongList;
}
LongList = LongList->next;
ShortList = ShortList->next;
}
return NULL;
}