1. 求一个数的二进制中的1的个数。
int func(int x) { int count = 0; while (x) { count++; x = x& (x - 1); } return count; }
2. 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy。
int _tmain(int argc, _TCHAR* argv[]) { const char *srcStr = "This is a source string."; //char *desStr = (char *)malloc(sizeof(srcStr)); // Or below: char *desStr = (char *)malloc(sizeof(char)* strlen(srcStr) + 1); myStrcpy(desStr, srcStr); printf("Copy result: %s", desStr); } char *myStrcpy(char *strDest, const char *strSrc) { if (strSrc == NULL || strDest == NULL) { return NULL; } if (strDest == strSrc) { return strDest; } char *strDestStart = strDest; while (*strDest !=‘\0‘) { *strDest++ = *strSrc++; } return strDestStart; }
3. 链表题:
一个链表的结点结构
struct Node
{
int data ;
Node *next ;
};
typedef struct Node Node ;
(1)已知链表的头结点head,写一个函数把这个链表逆序
思路: 用三个指针p0,p1,p2,从头到尾依次遍历并反转结点
int _tmain(int argc, _TCHAR* argv[])
{
int linkedListLength = 5;
Node *myList = new Node();
Node *p = myList;
printf("Original linked list is:");
for (int i = 0; i < linkedListLength; i++)
{
Node *node = new Node();
node->data = i;
printf(" %d", i);
p->next = node;
p = node;
}
Node *reversedMyList = ReverseLinkedList(myList);
printf("\r\nReversed linked list is:");
Node *r = reversedMyList;
while (r->next != NULL)
{
printf(" %d", r->data);
r = r->next;
}
}
Node *ReverseLinkedList(Node *head)
{
// NULL
if (head == NULL)
{
return NULL;
}
// One node only.
if (head->next == NULL)
{
return head;
}
// Two or more than two nodes.
Node *p0 = head;
Node *p1 = p0->next;
Node *p2 = p1->next; //p2 maybe null;
p0->next = NULL;
while (p2 != NULL)
{
p1->next = p0;
p0 = p1;
p1 = p2;
p2 = p2->next;
}
p1->next = p0;
return p1;
}
原文:http://www.cnblogs.com/fdyang/p/4387663.html