链表操作总结

[b]单个链表:[/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))


[b]两个链表(均无环):[/b]

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

b.相交的第一个点:

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

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


[b]两个链表(均有环):[/b]

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

b.相交的第一个点:

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

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


图中包含了链表的几种情况
[img]http://dl.iteye.com/upload/attachment/0062/1282/daf6e0d2-7bbb-39c1-8962-e97b08f3e613.jpg[/img]


可参考以下链接:


[url]http://eriol.iteye.com/blog/1184348[/url]

[url]http://blog.csdn.net/walkinginthewind/article/details/7074022[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值