网站百度知道,制作企业网站的问题,百度快照怎么没有了,全球网站流量排名查询奇偶链表
实例要求
1、给定单链表的头节点 head #xff0c;将所有索引为奇数的节点和索引为偶数的节点分别组合在一起#xff0c;然后返回重新排序的列表#xff1b;2、第一个节点的索引被认为是 奇数 #xff0c; 第二个节点的索引为 偶数 #xff0c;以此类推#x…奇偶链表
实例要求
1、给定单链表的头节点 head 将所有索引为奇数的节点和索引为偶数的节点分别组合在一起然后返回重新排序的列表2、第一个节点的索引被认为是 奇数 第二个节点的索引为 偶数 以此类推3、注意偶数组和奇数组内部的相对顺序应该与输入时保持一致4、必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题示例
实例分析
1、对输入的链表进行了边界检查如果链表为空或者只有一个节点则直接返回原链表2、初始化四个指针oddHead指向奇数索引链表的头节点evenHead指向偶数索引链表的头节点oddPtr和evenPtr分别指向当前奇数索引链表和偶数索引链表的末尾节点3、使用while循环遍历链表每次循环将奇数索引节点的下一个节点连接到奇数索引链表的末尾然后将奇数索引指针移动到刚刚添加的节点4、将偶数索引节点的下一个节点连接到偶数索引链表的末尾然后将偶数索引指针移动到刚刚添加的节点5、将奇数索引链表的尾部连接到偶数索引链表的头部形成最终的链表6、返回奇数索引链表的头部作为重新排序后的链表
示例代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
struct ListNode* oddEvenList(struct ListNode* head) {if (head NULL || head-next NULL) {return head;}// 分别初始化奇数索引链表和偶数索引链表的头节点struct ListNode *oddHead head;struct ListNode *evenHead head-next;struct ListNode *oddPtr oddHead;struct ListNode *evenPtr evenHead;// 遍历链表将奇数索引节点和偶数索引节点分别连接起来while (evenPtr ! NULL evenPtr-next ! NULL) {oddPtr-next evenPtr-next;oddPtr oddPtr-next;evenPtr-next oddPtr-next;evenPtr evenPtr-next;}// 将奇数索引链表的尾部连接到偶数索引链表的头部形成最终的链表oddPtr-next evenHead;return oddHead;
}运行结果