【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考研数据结构 文章被收录于专栏

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

全部评论

相关推荐

服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
沉淀一会:1.同学你面试评价不错,概率很大,请耐心等待; 2.你的排名比较靠前,不要担心,耐心等待; 3.问题不大,正在审批,不要着急签其他公司,等等我们! 4.预计9月中下旬,安心过节; 5.下周会有结果,请耐心等待下; 6.可能国庆节前后,一有结果我马上通知你; 7.预计10月中旬,再坚持一下; 8.正在走流程,就这两天了; 9.同学,结果我也不知道,你如果查到了也告诉我一声; 10.同学你出线不明朗,建议签其他公司保底! 11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务