Consider the function f defined below.
```
struct item
l
int data;
struct item * next;
l/
int f(struct item *p)
i
return (
(p == NULL) 11
(p->next == nULL) ||
({ p->-data <= p->next->data) $$\$ $ $$ f(p->next))
);
l
```
For a given linked list p, the function $f$ returns 1 if and only if (GATE CS 2003)
A. the list is empty or has exactly one element
B. the elements in the list are sorted in non-decreasing order of data value
C. the elements in the list are sorted in non-increasing order of data value
D. not all elements in the list have the same data value.