()本题要求倒排循环链表与上面倒排单链表处理不同之处有二一是初始化成循环链表而不是空链表;二是判断链表尾不用空指针而用是否是链表头指针算法中语句片段如下
p=la>next;∥p为工作指针
la>next=la;∥初始化成空循环链表
while(p!=la)∥当p=la时循环结束
{r=p>next;∥暂存p的后继结点
p>next=la>next;∥逆置
la>next=p; p=r;
}
()不带头结点的单链表逆置比较复杂解决方法可以给加上头结点
la=(LinkedList)malloc(sizeof(node));
la>next=L;
之后进行如上面()那样的逆置最后再删去头结点
L=la>next;∥L是不带头结点的链表的指针
free(la);∥释放头结点
若不增加头结点可用如下语句片段
p=L>next;∥p为工作指针
L>next=null;∥第一结点成为尾结点
while(p!=null)
{r=p>next;
p>next=L;∥将p结点插到L结点前面
L=p;∥L指向新的链表第一元素结点
p=r;
}
()同()只是叙述有异
()同()差别仅在于叙述不同
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []