Shr*_*Raj 3 c++ dictionary linked-list
我正在尝试找到两个链表之间的交点。我已经知道如何通过计算两个列表长度的绝对差并替换其中一个指针来解决问题。
我想知道是否可以通过存储每个节点的地址以及地图中存储该节点被访问次数的访问计数来解决这个问题。
int findMergeNode(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) {
map<int,int>m1;
//map<int*,int>m1 ??
//map<address,int>m1??
SinglyLinkedListNode *temp = head1;
while(temp!=nullptr) {
m1[temp]++;
temp = temp->next;
}
temp = head2;
while(temp!=nullptr) {
m1[temp]++;
temp = temp->next;
}
for(auto it=m1.begin();it!=m1.end();it++) {
if(it->second > 1) {
temp = it->first;
return temp->data;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
map<SinglyLinkedListNode *, int> m1;
Run Code Online (Sandbox Code Playgroud)
会成功的。对于每个指向 a 的指针SinglyLinkedListNode,您保留一个数字,即访问次数。
您可以通过以下方式做得更好:
map<const SinglyLinkedListNode *, int> m1;
Run Code Online (Sandbox Code Playgroud)
如果您不需要按顺序迭代指针,另一个选项是:
unordered_map<const SinglyLinkedListNode *, int> m1;
Run Code Online (Sandbox Code Playgroud)
有些人可能会声称这更好,因为指针没有有用的顺序。