zoukankan      html  css  js  c++  java
  • 6 奇偶链表(

    作者: Turbo时间限制: 1S章节: DS:数组和链表

    晚于: 2020-07-08 12:00:00后提交分数乘系数50%

    截止日期: 2020-07-15 12:00:00

    问题描述 :

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

    请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。

    示例 1:

    输入: 1->2->3->4->5->NULL

    输出: 1->3->5->2->4->NULL

    示例 2:

    输入: 2->1->3->5->6->4->7->NULL 

    输出: 2->3->6->7->1->5->4->NULL

    说明:

    应当保持奇数节点和偶数节点的相对顺序。

    链表的第一个节点视为奇数节点,第二个节点视为偶数节点,以此类推。

    可使用以下代码,完成其中的oddEvenList函数,其中形参head指向无头结点单链表,返回结果链表的头指针。

    输入说明 :

    首先输入链表长度len,然后输入len个整数,以空格分隔。

    输出说明 :

    输出格式见范例

    输入范例:

    5
    1 2 3 4 5

    输出范例:

    head-->1-->3-->5-->2-->4-->tail
    #include<iostream>
    #include<vector>
    using namespace std;
    
    struct ListNode
    {
        int val;
        ListNode *next;
        ListNode() : val(0), next(NULL) {}
        ListNode(int x) : val(x), next(NULL) {}
        ListNode(int x, ListNode *next) : val(x), next(next) {}
    };
    class Solution {
    public:
        ListNode* oddEvenList(ListNode* head) 
        {
            if(head==NULL||head->next==NULL)
                return head;
            ListNode *j_tail=head;//奇链表尾结点
            ListNode *ohead=head->next;//偶链表头结点
            ListNode *o_tail=head->next;//偶链表尾结点
            while(j_tail->next!=NULL&&o_tail->next!=NULL)
            {
                j_tail->next=o_tail->next;
                j_tail=j_tail->next;
                o_tail->next=j_tail->next;
                o_tail=o_tail->next;
            }
             j_tail->next=ohead;
             return head;
            
        }
    };
    ListNode *createByTail()
    {
        ListNode *head;
        ListNode *p1,*p2;
        int n=0,num;
        int len;
        cin>>len;
        head=NULL;
        while(n<len && cin>>num)
        {
            p1=new ListNode(num);
            n=n+1;
            if(n==1)
                head=p1;
            else
                p2->next=p1;
            p2=p1;
        }
        return head;
    }
    void  displayLink(ListNode *head)
    {
        ListNode *p;
        p=head;
        cout<<"head-->";
        while(p!= NULL)
        {
            cout<<p->val<<"-->";
            p=p->next;
        }
        cout<<"tail
    ";
    }
    int main()
    {
        ListNode* head = createByTail();
        head=Solution().oddEvenList(head);
        displayLink(head);
        return 0;
    }
  • 相关阅读:
    oracle执行完shutdown immediate后登陆不上了怎么办
    软件工程实践2017第一次作业-准备
    工作准备
    第二次作业——个人项目实战
    第一次作业-准备
    软件工程实践第二次作业-个人项目实战
    软件工程实践第一次作业-准备
    关于在git添加远程地址的过程中遇到的问题
    在配置github中遇到的一些问题
    软件工程实践第一次作业--准备
  • 原文地址:https://www.cnblogs.com/zmmm/p/13616679.html
Copyright © 2011-2022 走看看