这道题考查的是coding的熟练程度,我感觉,对于数组和链表的基本操作。
要注意的是对于值为负数的取模处理, if you directly calculate -4 % 3 you will get -1. You can use function: a % b = (a % b + b) % b to make it is a non negative integer.。
/**
* @param hashTable: A list of The first node of linked list
* @return: A list of The first node of linked list which have twice size
*/
public ListNode[] rehashing(ListNode[] hashTable) {
// write your code here
if (hashTable == null || hashTable.length == 0) {
return null;
}
int length = hashTable.length*2;
ListNode[] results = new ListNode [length];
for (ListNode node: hashTable) {
if (node != null) {
while(node != null) {
int hashCode = hashcode(node.val, length);
if (results[hashCode] == null) {
results[hashCode] = new ListNode(node.val);
} else {
ListNode cur = results[hashCode];
while (cur.next != null) {
cur = cur.next;
}
cur.next = new ListNode(node.val);
}
node = node.next;
}
}
}
return results;
}
private int hashcode(int key, int capacity) {
if (key > 0) {
return key % capacity;
}
2
else {
return (key % capacity + capacity) % capacity;
}
2
}