六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 2179|回复: 1

链表笔试题

[复制链接]

升级  67.2%

274

主题

274

主题

274

主题

进士

Rank: 4

积分
836
 楼主| 发表于 2012-12-30 16:32:53 | 显示全部楼层 |阅读模式
<div id="cnblogs_post_body">链表:
1、注意是否有带头结点。
2、单链表的建立:顺序建表(尾插法)、逆序建表(头插法)。单链表插入、删除操作需要寻找前驱结点。
3、双向链表和单向链表相比,多了一个前驱指针,单向链表在删除结点时候要遍历链表,双向链表在删除不需要遍历。
一、判断两个链表是否相交:(假设两个链表都没有环)
1、判断第一个链表的每个节点是否在第二个链表中  2、把第二个链表连接到第一个后面,判断得到的链表是否有环,有环则相交  3、如果两个链表有一个公共结点,那么该公共结点之后的所有结点都是重合的,那么,它们的最后一个结点必然是重合的。先遍历第一个链表,记住最后一个节点,再遍历第二个链表,得到最后一个节点时和第一个链表的最后一个节点做比较,如果相同,则相交
如何判断一个单链表是有环的? 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)程序如下:
<div class="cnblogs_code">bool IsExitsLoop(ListNode *head)  {      ListNode *slow = head, *fast = head;      while(fast && fast->next)       {          slow = slow->next;          fast = fast->next->next;          if(slow == fast) break;      }      return !(fast == NULL || fast->next == NULL);  }  

升级  26%

0

主题

0

主题

0

主题

秀才

Rank: 2

积分
89
发表于 2013-2-6 23:29:42 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表