给定一个带哨位结点的双向循环链表,其结点结构为:
struct ListNode{
int data;
int freq; //表示该结点的访问频率(被访问的次数)
ListNode* prev;
ListNode* next;
};
假定链表中无重复元素,且初始时各结点的频度域freq的值均初始化为零。
请编程实现函数ListNode* visit(ListNode* head, int K),其功能是查找数据值等于K的结点,并返回指向该结点的指针(若无满足条件的结点则返回NULL),与此同时,将该结点的频度域freq的值增1,同时调整链表中各结点的顺序,使各结点按访问频度递减排列,从而始终保持被频繁访问的结点总是靠近表头。