Example 4: An example to illustrate differences between algorithms in Group #2,#3 and #4 typedef struct S { int data; S * next; }S; foo( S *x, S *y) { x->next = y; } S st1, st2 main( ) { foo(&st1, &st1) /* call site C1 */ ....... foo(&st1, &st2) /* call site C2 */ }