交换P所指结点与其下一个结点的位置
题目
已知线性表的第一个结点由list指出,请写一个算法,交换P所指结点与其下一个结点的位置(假设p指向的不是链表中的最后一个结点)。
分析
算法分两部分
- 第一:当p所指的是链表的第一个结点时;
- 第二:当P所指的是链表的中间结点时;
代码
// 交换P所指结点与其下一个结点的位置
LinkList EXCHANGE(LinkList list,LinkList p){
LinkList q = list;
if (p==q) {
list=list->link;
p->link=p->link->link;
list->link=p;
}else {
while (q->link!=p) {
q=q->link;
}
// 这里的顺序不能换,避免断链。
q->link=p->link;
p->link=p->link->link;
q->link->link=p;
}
return list ;
}