我经历的华为一面、二面手撕代码题目(附答案)
一面手撕代码题目
题目描述
给一个链表和一个数,将链表分为两部分,左边部分小于x,右边部分大于或等于x,保证两部分中节点的相对顺序与之前一致。
比如: Input: head = 1->4->3->2->5->2, x = 3 Output: 1->2->2->4->3->5
我的答案
#include<stdio.h> #define L 6 typedef struct ListNode { struct ListNode *next; int data; }Node; void breakNode(Node* a, Node* b) // break b from a->b->c { a->next = b->next; } void insertNode(Node* a, Node* b) // insert a after b { if (b && b->next) { Node* temp = b->next; b->next = a; a->next = temp; } else { printf_s("cPos or cPos->next is null."); } } Node* partition(Node *head, int x) { Node* temp = head; Node* cPos = NULL; int found = 0; while (temp && temp->next) { if (found == 0 && temp->data < x) { cPos = temp; found = 1; } if (found == 1 && temp->next && temp->next->data < x) { Node* ctemp = temp->next; breakNode(temp, ctemp); insertNode(ctemp, cPos); cPos = cPos->next; } if (temp->next) { temp = temp->next; } else { break; } } return head; } void printList(Node *input, int Length) { for (int i = 0; i < Length; i++) { printf_s("%d", input->data); printf_s(i < Length - 1 ? "->" : " "); input = input->next; } } void main() { int a[L] = { 1, 4, 3, 2, 5, 2}; int x = 3; Node *input = (Node *)malloc(sizeof(Node)); input->data = a[0]; Node *head = input; for (int i = 1; i < L; i++) { Node *temp = (Node *)malloc(sizeof(Node)); temp->data = a[i]; head->next = temp; head = head->next; } head->next = NULL; printList(input, L); Node *output = partition(input, x); printList(output, L); }
二面手撕代码题目
题目描述
请用随机函数float random()(返回0~1)的随机数,计算出圆周率数值。
我的答案
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> void main() { srand(time(0)); double x, y, pi; long int n, nt = 0; printf_s("Input (for example 100000): "); // 投针次数 scanf_s("%ld", &n); for (int i = 0; i <= n; i++) { x = rand() / (double)RAND_MAX * 2.0; y = rand() / (double)RAND_MAX * 2.0; // 产生(0, 2) * (0, 2)区间内的随机数 if (pow(x - 1.0, 2.0) + pow(y - 1.0, 2.0) <= 1.0) nt++; // 如果随机点落在圆内 } pi = 4.0 * nt / n; // pi * r^2 / ((2r)^2) = pi / 4, so * 4.0 printf_s("pi = %lf ", pi); }
上一篇:
IDEA上Java项目控制台中文乱码