首页 > 其他分享 >阅文-2023-秋招笔试

阅文-2023-秋招笔试

时间:2022-11-02 09:47:04浏览次数:70  
标签:OddNode head 阅文 back next EvenNode que 2023 秋招

编程题1-奇偶链表

对于一个链表,按照 先访问偶数下标的节点再访问奇数下标的节点 重新排列

思路是:奇偶两个指针交替移动并改变指针指向,最后将偶指针的下一个指向保存的第一个奇节点,并把奇指针的下一个指向置空

ListNode* oddEvenList(ListNode* head) {

	// 如果长度是0或者1,没有操作的必要
	if (!head || !head->next) return head;

	// 空间复杂度要求原地修改,时间复杂度要求一次遍历
	ListNode* EvenNode = head;
	ListNode* OddNode = head->next;
	ListNode* save = head->next;

	while (OddNode->next) {
		EvenNode->next = OddNode->next;
		EvenNode = OddNode->next;
		if (EvenNode->next) {
			OddNode->next = EvenNode->next;
			OddNode = EvenNode->next;
		}
		else break;
	}
	OddNode->next = nullptr;	
	EvenNode->next = save;
	return head;
}

编程题2-最左子节点

打印一颗二叉树的最左下角子节点

思路是:层序遍历,输出最后一层第一个节点

但是我忘记怎么按层打印二叉树了(怎么给序列分层)

二叉树的层序打印用到了双向队列,按层的关键是int curSize=que.size()

vector<vector<int>> levelOrder(TreeNode* root) {
	vector<vector<int>> res;

	if (!root) return res;

	deque<TreeNode*> que;
	que.push_back(root);

	while (!que.empty()) {
		int curSize = que.size();
		res.push_back(vector<int>());
		for (int i = 0; i < curSize; i++) {
			TreeNode* node = que.front();
			que.pop_front();
			res.back().push_back(node->val);
			if (node->left) que.push_back(node->left);
			if (node->right) que.push_back(node->right);
		}
	}
	return res;
}

层序遍历写出来这题就很好做了,只要return res.back().front();
天,我真蠢

标签:OddNode,head,阅文,back,next,EvenNode,que,2023,秋招
From: https://www.cnblogs.com/yaocy/p/16849877.html

相关文章