链表相关面试题

来源:互联网 发布:smartgit mac 破解版 编辑:程序博客网 时间:2024/06/05 08:32

原文及参考答案:http://blog.csdn.net/zjumath/article/details/4008719   http://keep.iteye.com/blog/293454
题一、 给定单链表,检测是否有环。
         扩展: 怎么快速检测出一个巨大的链表中的死链?或者如何找出一个单链表的中间节点?
题二、 给定两个单链表(head1,head2),检测两个链表是否有交点,如果有返回第一个交点。
题三、 给定单链表(head),如果有环的话请返回从头结点进入环的第一个节点。
          要点: 如果两个链表相交,那个两个链表从相交点到链表结束都是相同的节点
         另解:http://hxraid.iteye.com/blog/701699
题四、只给定单链表中某个结点p(并非最后一个结点,即p->next!=NULL)指针,删除该结点。
题五、只给定单链表中某个结点p(非空结点),在p前面插入一个结点。
题六、给定单链表头结点,删除链表中倒数第k个结点。

补充:
题七、逆序输出无环单链表的所有节点值
    详见 :http://blog.csdn.net/zhulei632/article/details/6736260
    扩展:该题还有两个常见的变体:
      1. 从尾到头输出一个字符串;
      2. 定义一个函数求字符串的长度,要求该函数体内不能声明任何变量。
题八、无环单链表逆序
/* 无环单链表逆序 */Node* reverseList2(Node* head){    Node* pReversedHead = NULL;    Node* cursor = head;     while(cursor != NULL)    {        Node* next = cursor->next;        if(NULL == pReversedHead){            cursor ->next = NULL;        }else {            cursor->next = pReversedHead;            }        pReversedHead = cursor;        cursor = next;    }    return pReversedHead;}
题九、无环单链表合并[微软]
          已知单链线性表La和Lb的元素按值非递减排列.归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列.
          参考:http://rayloo.iteye.com/blog/1008874
原创粉丝点击