摘要: 这是一个比较常见的面试算法题:一次遍历找链表倒数第n个节点。通过一次遍历找到单链表中倒数第n个节点,链表可能相当大,可使用辅助空间,但是辅助空间的数目必须固定,不能和n有关。不管是顺数n个还是倒数n个,其实都是距离-标尺问题。标尺是一段距离可以用线段的两个端点来衡量,我们能够判断倒数第一个节点,因为他的 next==NULL。如果我们用两个指针,并保持他们的距离为n,那么当这个线段的右端指向末尾节点时,左端节点就指向倒数第n个节点。建立两个指针,第一个先走n步,然后第2个指针也开始走,两个指针步伐(前进速度)一致。当第一个结点走到链表末尾时,第二个节点的位置就是我们需要的倒数第n个节点的值。代 阅读全文
posted @ 2012-06-05 17:13 希亚 阅读(1232) 评论(1) 推荐(0) 编辑
摘要: 单链表排序是单链表的常见编程任务之一,也是面试中经常出现的题目。单链表排序的关键是交换算法,需要额外考虑。选择排序是比较直观的排序算法之一,这里就使用选择排序实现单链表的排序。如果需要对选择排序复习一下,传送门:算法导论:选择排序的原理与实现。C实现代码如下:LinkList SelectSort2(LinkList L){ LinkList p,q,small; int temp; for(p = L->next; p->next != NULL; p = p->next) { small = p; for(q = p->next; q; ... 阅读全文
posted @ 2012-06-05 08:36 希亚 阅读(677) 评论(0) 推荐(0) 编辑