2.15
//2018年8月17日 练习2.15
void stick(linklist &ha, linklist &hb, linklist &hc)
{
if (m < n)
{
pa = ha->next;
while (pa->next != null)
pa = pa->next;
pa->next = hb->next;
free(hb);
hc = ha;
}
else
{
pb = hb->next;
while (pb->next != null)
pb = pb->next;
pb->next = ha->next;
free(ha);
hc = hb;
}
}
2.16
void deleteandinsertsub(linkedlist la, linkedlist lb, int i, int j, int len)
{
if (i < 0 || j < 0 || len < 0) return INFEASIBLE;
p = la;prep = la;k = 1;prev = NULL;
while(p&&k<i)
{
prev = p;p = p->next;k++;
}
if (!p) return INFEASIBLE;//找到第i个
q = p;k = 1;
while (q&&k < len)
{
q = q->next;k++;
}
if (!q) return INFEASIBLE;
if (!prep) la = q->next;//全删完了,剩下空表
if (j == 1) q->next = lb;
else
{
s = lb;k = 1;
while (s&&k < j - 1)
{
s = s->next;
k++;
}
q->next = s->next;
s->next = p;
return OK;
}
}
2.22
void revert(linklist la)
{
s = la->next;
la->next = null;
p = s;
while (s->next != null)
{
p = p->next;
s->next = la->next;
la->next = s;
s = p;
}
s->next = la->next;
la->next = s;
}
2.23
void connect(linklist la, linklist lb)
{
p = la;q = lb;
while (p->next&&q->next)
{
m = q->next;
q->next = p->next;
p->next = q;
p = q->next;
q = m;
}
if (!p->next)
{
q->next = p->next;
p->next = q;
}
free(lb);
}
2.24
void connection(linklist la, linklist lb)
{
p = la->next;
p1 = p->next;
q = lb->next;
q1 = q->next;
free(lb);
la->next = null;//拿la做头结点
while (p&&q)
{
if (p->data < q->data)
{
p->next = la->next;
la->next = p;
p = p1;
p1 = p1->next;
}
else
{
q->next = la->next;
la->next = q;
q = q1;
q1 = q1->next;
}
}
while (!p)
{
p1 = p->next;
p->next = la->next;
la->next = p;
p = p1;
}
while (!q)
{
q1 = q->next;
q->next = la->next;
la->next = q;
q = q1;
}
}
2.28
void connection(linklist la, linklist lb)
{
pa = la->next;pb = lb->next;
ha = la;
la->next = null;
while (pa&&pb)
{
if (pa->data < pb->data&&)
{
ha->next = pa;
pa = pa->next;
ha = ha->next;
}
if (pa->data > pb->data)
{
ha->next = pb;
pb = pb->next;
ha = ha->next;
}
if (pa->data == pb->data)
{
ha->next = pa;
pa = pa->next;
ha = ha->next;
freeb = pb;
pb = pb->next;
free(freeb);
}
}
while (!pa)
{
ha->next = pa;
}
while (!pb)
{
ha->next = pb;
}
}
2.29
void delete(linklist la, linklist lb, linklist lc)
{
pa = la->next;
da = la;
pb = lb->next;
pc = lc->next;
while (pa)
{
if (!pb) {
if (pa->data == pb->data&&pb->data != pc->data)
{
da->next = pa->next;
deletea = pa;
pa = pa->next;
free(deletea);
pb = pb->next;
}
}
if (!pc) {
if (pa->data == pc->data&&pc->data != pb->data)
{
da->next = pa->next;
deletea = pa;
pa = pa->next;
free(deletea);
pc = pc->next;
}
}
if (!pc && !pb) {
if (pa->data == pb->data&&pb->data == pc->data)
{
da->next = pa->next;
deletea = pa;
pa = pa->next;
free(deletea);
pb = pb->next;
pc = pc->next;
}
}
if(pa->data!=pb->data&&pa->data!=pc->data)
{
pa = pa->next;
pb = pb->next;
pc = pc->next;
}
if (pb->data == pc->data&&pb->data != pa->data)
{
pa = pa->next;
pb = pb->next;
pc = pc->next;
}
}
}