首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

链表操作小结

2012-10-13 
链表操作总结单个链表:a.判断是否有环:快慢法(p1p2head,p1p1.next,p2p2.next.next)b.环的第一个节点:

链表操作总结

单个链表:

        a.判断是否有环:快慢法(p1=p2=head,p1=p1.next,p2=p2.next.next)

        b.环的第一个节点:假设p1,p2在环内的某点p相遇,则p1从p点继续遍历,p2从头节点开始遍历,两者相等的第一个点即为所求(证明略)
        c.反向输出链表:利用递归。(printNode(p.next);print(p))



两个链表(均无环):

a.是否相交:各自遍历至最后一个节点,若最后一个节点相等,则相交

b.相交的第一个点:

solution1 人工构环。将B链表的表尾和A链表的表头相连,转化为求单个有环链表的第一个节点

solution2 在执行a操作时候,记录两个链表的长度len1和len2(假设len1>=len2),则p1先遍历(len1-len2)个结点,然后p2也开始遍历,两者相遇(相等)的第一个节点为所求


两个链表(均有环):

a.是否相交:将A链表的环断开,若B链表从有环变成无环,则相交

b.相交的第一个点:

solution1 将A链表的环断开,变成两个无环链表求相交的第一个点(相交的第一个点与环入口点可能不是同一个点,求环入口点就按单个有环链表求入口点一样)

solution2 找出各自的环入口,如果相等,则相交


图中包含了链表的几种情况



可参考以下链接:


http://eriol.iteye.com/blog/1184348

http://blog.csdn.net/walkinginthewind/article/details/7074022



热点排行