计算机考研复试中,编程题是考查考生实践能力的重要环节,以下为高频题型及C语言实现:
题目1:反转链表。要求将单链表反转,如输入1→2→3→4,输出4→3→2→1。
实现思路:使用三个指针(prev、curr、next)遍历链表,依次反转节点指向。
代码:
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *prev = NULL, *curr = head, *next;
while(curr) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
题目2:二叉树层序遍历。要求按层次输出二叉树节点值,如三层树输出为第一层、第二层、第三层节点值。
实现思路:使用队列存储各层节点,出队时将子节点入队。
代码:
void levelOrder(struct TreeNode* root) {
if(!root) return;
struct Queue* q = initQueue();
enQueue(q, root);
while(!isEmpty(q)) {
int size = getSize(q);
for(int i=0; i struct TreeNode* node = deQueue(q); printf("%d ", node->val); if(node->left) enQueue(q, node->left); if(node->right) enQueue(q, node->right); } printf("
"); } } 题目3:最长回文子串。给定字符串,找出最长的回文子串,如输入"babad",输出"bab"或"aba"。 实现思路:中心扩展法,对每个字符和相邻字符对向两边扩展,记录最长回文。 代码: char* longestPalindrome(char* s) { int start=0, end=0; for(int i=0; s[i]; i++) { int len1 = expand(s, i, i); int len2 = expand(s, i, i+1); int len = len1 > len2 ? len1 : len2; if(len > end - start) { start = i - (len-1)/2; end = i + len/2; } } char* res = malloc(end - start + 2); strncpy(res, s+start, end-start+1); res[end-start+1] = ' '; return res; } int expand(char* s, int l, int r) { while(l>=0 && s[r] && s[l]==s[r]) l--, r++; return r - l - 1; } 这些题型涵盖了链表、树、字符串等核心数据结构,掌握其实现思路对复试至关重要。
免责声明:本站所提供试题均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用,不涉及商业盈利目的。如涉及版权问题,请联系本站管理员予以更改或删除。