1. ממש פונקציה שמקבלת מספר עשרוני ומדפיסה את ערכו הבינארי.
2. בהינתן רשימה מקושרת עם מצביע לאיבר הראשון בלבד. החזר רשימה שהיא אותה הרשימה שקיבלת רק בסדר הפוך, כלומר אם הסדר היה
head–>11>22>33
אז אחרי הוא יהיה:
head–>33>22>11
אסור להזיז האיברים עצמם, רק מצביעים.
יש לפתור ב-C.
פתרונות מוצעים:
/*
*Q1.Write a function in C for printing to screen the binary value of a given decimal value.
*/
#include <stdio.h>
#include <string.h>
long dec2bin(int dec){
if(dec<0){ printf("MINUS: (-)"); dec=-dec;}
if(dec==0 || dec==1) return (long) dec;
return (long) (10*dec2bin(dec>>1) + (dec & 1));
}
main(){
int arg=-300000;
printf("%ld is the binary value of the decimal number: %d", dec2bin(arg), arg);
}
/*Will result: MINUS: (-)1001001001111100000 is the binary value of the decimal number: -300000*/
/*
*Q2. Reverse a given Linked List. Only pointers changes are allowed.
*/
#include<stdlib.h>
#include<stdio.h>
typedef struct linkList {
int value;
struct linkList * next;
} Node;
void printLinkedlist(Node *head){
printf("\nHead->");
for( ; head; head = head->next)
printf("%d->", head->value);
printf("NULL\n");
}
Node* reversedLink(Node *head){
if( !(head && head->next) ) return head;
Node *reversedhead = reversedLink(head->next);
head->next->next = head;
head->next = NULL;
return reversedhead;
}
void main() {
Node * curr, * head;
int i;
head = NULL;
for(i=1; i<=10; i++, head=curr)
*(curr = (Node *) malloc(sizeof(Node))) = (Node) {i, head};
printf("\nBefore:");
printLinkedlist(head);
printf("\nAfter:");
printLinkedlist( (head = reversedLink(head)) );
}
/*Will result:
Before:
Head->10->9->8->7->6->5->4->3->2->1->NULL
After:
Head->1->2->3->4->5->6->7->8->9->10->NULL*/