返回信息流网上查不到程序啊,都是C++的
有java的么,跪求赐教!
这是一条镜像帖。来源:北邮人论坛 / java / #49157同步于 2016/4/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
跪求 n个链表的公共出现节点
waiting
2016/4/9镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
奥,感觉说的挺对的,谢谢你!
【 在 dongqing 的大作中提到: 】
: 是不是应该遍历所有链表,找出最多节点数的链表和最少结点数的链表,然后找这两个链表的第一个公共结点。(猜测)
n个链表,就好像是一条河完整的支流与干流。
算法思路大致如下:
假设这些源头分别为p[1] - p[n]
第一个循环,求这些链表的长度,存放在数组a中,求出最大值,用最大值减去数组中的每个元素得到一个新数组b
新建一个名为temp的Hashset,另一个长度为n的bitset
第二个循环对于b每一个元素,若下标k的元素为0,则该位bitset设为true,将p[k]放入temp,如果temp中存放过了该节点,计数加一,下次不再加。
然后 for each 1:n && true,p[n] = p[n].next,对所有的1:n b[n] = b[n] - 1,清空temp,重复上一步
这是由判别两个链表是否交叉发散出来的解法(求出两个链表长度差k,长的链表先k步开始遍历,如果二者遍历中出现了相同节点,则交叉)
我这里有一个求总共交点的代码,简单的的改一下每个节点的前进条件与计数条件就可以了。
import java.util.BitSet;
import java.util.HashSet;
public class Solution {
public int commonNodes(ListNode[] roots) {
if(roots == null)
return 0;
int num = roots.length; //num is the number of linked list
if(num == 0)
return 0;
ListNode[] nodes = roots;
int[] clock = new int[num];
for(int i = 0; i < num; i ++){
int temp = 0;
ListNode node = nodes[i];
while(node != null){
node = node.next;
temp ++;
}
clock[i] = temp;//clock数组相当于一个计时器,同时也相当于出发时刻表,越大的越先出发
}
int max = maxValue(clock);
HashSet<Integer> set = new HashSet<Integer>();
BitSet bitset = new BitSet(num);//已经按长度排序开始遍历、且没有被汇合、且没有结束遍历的节点,其状态为true
int res = 0;
boolean flag = true;
while(max > 0){
for(int i = 0; i < num; i ++){
if(clock[i] == max)//第i个计时器计时时间到
bitset.set(i);//轮到第i个节点出发
if(bitset.get(i)){//所有为true的都有可以前进一格
if(set.contains(nodes[i].val)){//如果前进的过程中碰上了
res ++;//重复节点+1
bitset.clear(i);//失去前进资格
}else
set.add(nodes[i].val);//如果前进过程中没碰上其他节点,记录这个点
if(nodes[i].next == null)//如果一个节点走到头了,下一轮失去前进资格
bitset.clear(i);
nodes[i] = nodes[i].next;//前进
}
}
max --;
set.clear();
}
return res;
}
public int maxValue(int[] array){
int max = Integer.MIN_VALUE;
for(int i = 0; i < array.length; i++)
max = max>array[i]?max:array[i];
return max;
}
}
【 在 waiting 的大作中提到: 】
: 网上查不到程序啊,都是C++的
: 有java的么,跪求赐教!
赞!真心牛!我邮果然高手如云!谢谢你!
【 在 rancho 的大作中提到: 】
: n个链表,就好像是一条河完整的支流与干流。
: 算法思路大致如下:
: 假设这些源头分别为p[1] - p[n]
: ...................