这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战
链表基础题(主要思路)
8.寻找两个链表的公共结点
##思路:先让腿长的人先跑前面的差程,然后和腿短的人一起跑,一起寻找交叉点
LinkList SearchList(LinkList L1,LinkList L2){
int len1 = Length(L1);
int len2 = Length(L2);
int dist;
LinkList longLis,shortList; //指向较长和较短的链表
if(len1 > len2){ //L1长
longLis = L1->next;
shortList = L2->next;
dist = len1 - len2;
}else{
longLis = L2->next;
shortList = L1->next;
dist = len2 - len1;
}
while(dist--){
longLis = longLis->next; //先让腿长的先跑
}
while(longLis != NULL){
if(longLis == shortList) return longLis;
else{ //寻找那个同时跑的 起跑线
longLis = longLis->next;
shortList = shortList->next;
}
}
return NULL;
}
9.升序输出链表
思路:每次找m最小值,从而输出再释放结点
10.将题中链表分为序号奇偶两个链表
思路:设两个指针分别指向新的两个链表
LinkList DisCreat(LinkList &A){
int i = 0;
B = (LinkList)malloc(sizeof(LNode));
B->next = NULL; //B表初始化
LNode *ra = A,*rb = B; //分别指向AB两表
p = A->next; //p为工作指针
A->next = NULL;
while(p != NULL){
i++;
if(i&2 == 0){ //序号为偶
rb->next = p; //插入rb表
rb = p; //指向新的尾节点
}else{ //序号为奇
ra->next = p;
ra = p;
}
p = p->next; //p 往前走
}
ra->next = NULL;
rb->next = NULL;
return B;
}