At least part of the problem is here:
if (node==null || node.next==null)
return null;
If the current node is null, you should return null, However, if the node.next is null, you should return node.
Consider the case of a list [3, 2]
The list nodes are (NODE [3], Next -> NODE [2], Next -> [NULL])
You break the list with Walker = (NODE [3], Next -> [NULL]) and Runner = (NODE [2], Next -> [NULL])
and then call merge sort on both Walker (renamed to Left) and Runner (renamed to Right)
It is on each of these calls, the Node.next test is null and therefore it returns null and not the list you intend, which should be what was passed in.
There is a bug that will generate a NULL Pointer Exception in the merge method.. can you find it?