![](https://csdnimg.cn/release/download_crawler_static/3971140/bg8.jpg)
- 8 - 文都教育在线: www.wendu.com
答: 单链表中查找任何结点,都必须从头指针开始。本题要求将指针 p 所指结点与其后继
结点交换,这不仅要求知道 p 结点,还应知道 p 的前驱结点。这样才能在 p 与其后继结点
交换后,由原 p 结点的前驱来指向原 p 结点的后继结点。
LinkedList Exchange ( LinkedList HEAD , p )
∥ HEAD 是单链表头结点的指针, p 是链表中的一个结点。本算法将 p 所指结点与其后继 结
{q=head->next ; ∥ q 是工作指针,指向链表中当前待处理结点。
pre=head ; ∥ pre 是前驱结点指针,指向 q 的前驱。
while ( q!=null && q!=p ) {pre=q ; q=q->next ; } ∥ 未找到 p 结点,后移指针。
if
( p->next==null
)
printf
(
“ p 无后继结点 \n
”
)
; ∥ p 是链表中最后一个结点,无后
继。
pre->next=q ; ∥ p 前驱结点的后继指向 p 的后继。
p->next=q->next ; ∥ p 的后继指向原 p 后继的后继。
q->next=p ; ∥ 原 p 后继的后继指针指向 p 。
7 .已知线性链表第一个链结点指针为 list ,请写一算法,将该链表分解为两个带有头结 点
的循环链表,并将两个循环链表的长度分别存放在各自头结点的数据域中。 其中 , 线性表 中
序号为偶数的元素分解到第一个循环链表中 , 序号为奇数的元素分解到第二个循环链表中。
v oid split(ListNode *List, ListNode *&list1, ListNode *&list2)
{ list1=(ListNode *)malloc(siz eof(ListNode )) ;
list2=(ListNode *)malloc(siz eof(ListNode )) ;
{ q->next=p; q=q->next; len1++; mark=2; }
{ r->next=p; r=r->next; len2++; mark=1; }
8. 设 A 和 B 是两个单链表,其表中元素递增有序。