请教大家一道bb的面经题

题目是这样的,给你两个linked list, 比如A->B->C-D, E->A->F->D, 把这两个list合并成一个list,要求是,比如B出现在A的后面,那在合并后的list中,B也要出现在A的后面,这题的答案可以是E->A->B->C->F->D或者E->A->F->B->C->D。
这题我唯一想到的办法就是类似于topological sorting, 但感觉肯定有更简单的方法。就是实在想不出来

多谢各位了

感觉你用两个set分别记录两个list 的元素,然后两个pointer 分别走,当走到某个元素也存在另一个list 时,去走另一个pointer. 不知道行不行

感觉就拓扑排序吧 如果有followup好做

P和Q分别是指向两个LIST的指针,创建一个新LIST,如果P和Q都VALID,就随机向新LIST里插入P或者Q指向的元素,并移动该指针;如果只有一个是VALID的,就插入该指针指向的元素并移动;如果都不VALID,那就结束操作。

就用topological sort的BFS版本,本身代码量不大,时间复杂度也不高。