两个链表取交集(C#)

算法:取两个递增链表的交集

要求:

//把递增链表la和lb的交集取出
//结果存放到链表la中

我的做法:

1.思考:我们要取两个链表的交集,就是相同结点,所以这些结点是链表la和lb中都有的,而且最后的结果要放在链表la中,所以我的想法是直接在la上进行操作,把la中有而lb中没有的结点直接删除即可。
2.具体思路是用两个for循环实现的:外循环控制链表la,内循环控制链表lb,用la中的一个结点和lb中的每一个结点比较,出现相等情况这个结点就属于交集,在la中保留下来,如果没有与之相等的值,就删除这个结点。
注意:
(1)object类型的两个值不能进行比较,需要转换成string或int等具体相同类型。在此题中p.next.data和q.next.data就不能比较,即使他们的数值相等也会返回false。
(2)当出现同值时运行p=p.next,跳到下一个结点;当无同值出现时,删除该结点,此时不需要运行p=p.next,因为之前的p.next被删除了,p.next顺延到了下一个结点。
(3)要想执行单链表的删除操作一定要把游标p停在待删除结点的前一个结点处,而不是刚好停在待删除结点处,要理清多个next的关系。

public void Same(LinkList lb)
{
	Node m;
	for (Node p = this.head; p.next != null; )
	{
		for (Node q = lb.head; q.next != null; )
		{
			if (p.next.data.ToString() == q.next.data.ToString())
			{
				p = p.next;
				break;
			}
			else if (q.next.next == null)
			{
				m = p.next;
				p.next = m.next;
				break;
			}
		q = q.next;
		}
	}
}
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值