算法:取两个递增链表的交集
要求:
//把递增链表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;
}
}
}