【2024考研】题解11 | #链表的奇偶重排#

链表的奇偶重排

https://www.nowcoder.com/practice/02bf49ea45cd486daa031614f9bd6fc3

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* oddEvenList(ListNode* head) {
        // write code here
        //特例存在一方空表或者单位表,直接输出
        if(head == NULL || head->next == NULL){
            return head;
        }
        //奇偶数节点表头
        ListNode *oddhead = head;
        ListNode *oddtail = oddhead;
        //奇偶数节点表尾
        ListNode *evenhead = head->next;
        ListNode *eventail = evenhead;
        //以偶数为基准,双跨连接,奇动偶再动
        while (eventail != NULL && eventail->next != NULL) {
            oddtail->next = eventail->next;
            oddtail = oddtail->next;

            eventail->next = oddtail->next;
            eventail = oddtail->next;
        }
       
        //最后奇数节点尾连上偶数节点头
        oddtail->next = evenhead;
        //输出奇数在前
        return oddhead;
    }
};

基本算法思想

①该算法首先判断链表是否为空或只有一个节点,

②如果是,则直接返回原链表。然后创建两个指针oddHeadevenHead,分别指向奇数位节点的头节点和偶数位节点的头节点。

同时创建两个指针oddTailevenTail,分别指向奇数位节点和偶数位节点的尾节点。

③然后使用一个循环,将奇数位节点和偶数位节点分别连接起来,直到遍历完整个链表。

④最后将奇数位节点的尾节点指向偶数位节点的头节点,并返回奇数位节点的头节点。

时空复杂度

该算法的时间复杂度为O(n),其中n是链表的长度。算法遍历了整个链表一次。

空间复杂度为O(1),只使用了常数级别的额外空间。

2024考研数据结构 文章被收录于专栏

本人考研刷算法题,立此专栏练习强化。

全部评论

相关推荐

霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务