数据结构与算法:链表的奇偶重排

描述
给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。
注意是节点的编号而非节点的数值。
在这里插入图片描述

链表的奇偶重排



public class OddEvenList {

      static class ListNode {
        int val;
        ListNode next = null;
        public ListNode(int val) {
          this.val = val;
        }
      }

    public static ListNode oddEvenList2 (ListNode head) {
        //如果链表为空,不用重排
        if(head == null)
            return head;
        //even开头指向第二个节点,可能为空
        ListNode even = head.next;
        //odd开头指向第一个节点
        ListNode odd = head;
        //指向even开头
        ListNode evenhead = even;
        while(even != null && even.next != null){
            //odd连接even的后一个,即奇数位
            odd.next = even.next;
            //odd进入后一个奇数位
            odd = odd.next;
            //even连接后一个奇数的后一位,即偶数位
            even.next = odd.next;
            //even进入后一个偶数位
            even = even.next;
        }
        //even整体接在odd后面
        odd.next = evenhead;
        return head;
    }

    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param head ListNode类
     * @return ListNode类
     */
    public static ListNode oddEvenList (ListNode head) {
        ListNode oddList = head;  // 奇数
        ListNode evenList; // 偶数

        if(null == head){
            return null;
        }

        evenList = oddList.next; // 奇数的下一个是偶数

        ListNode tmpOddNode = oddList;
        ListNode tmpEvenNode = evenList;
        ListNode evenhead = tmpEvenNode;
        // 2 1 3 5 6 4 7
        while(tmpEvenNode != null && tmpEvenNode.next != null){
            tmpOddNode.next = tmpEvenNode.next;
            tmpOddNode = tmpOddNode.next;


            tmpEvenNode.next = tmpOddNode.next;
            tmpEvenNode = tmpEvenNode.next;

        }
        tmpOddNode.next = evenhead;
        return oddList;
    }


    public static void main(String[] args) {
        // 2 1 3 5 6 4 7
        ListNode l1 = new ListNode(2);
        ListNode l2 = new ListNode(1);
        ListNode l3 = new ListNode(3);
        ListNode l4 = new ListNode(5);
        ListNode l5 = new ListNode(6);
        ListNode l6 = new ListNode(4);
        ListNode l7 = new ListNode(7);
        l1.next = l2;
        l2.next = l3;
        l3.next = l4;
        l4.next = l5;
        l5.next = l6;
        l6.next = l7;

        ListNode t = oddEvenList(l1);
        System.out.println(t);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
循环链表是一种特殊类型的链表,其尾节点指向头节点形成一个循环。相比于普通链表,循环链表可以更方便地遍历链表或进行某些操作。对于数据结构与算法的循环链表的随堂实验,我无法直接引用提供的参考内容中的具体实验内容。但是,一般的循环链表实验可能会包括以下几个步骤: 1. 定义循环链表节点类。 2. 实现循环链表的插入操作,可以在链表的任意位置插入新的节点。 3. 实现循环链表的删除操作,可以删除链表中的指定节点。 4. 实现循环链表的查找操作,可以根据给定的条件查找链表中的节点。 5. 实现循环链表的遍历操作,可以按照特定的顺序遍历链表中的所有节点。 请根据具体的实验要求,参考引用内容中的链表定义与用法,进行相应的实验设计与实现。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [Python实现的数据结构与算法链表详解](https://download.csdn.net/download/weixin_38545117/13771586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python数据结构与算法链表定义与用法实例详解【单链表、循环链表】](https://download.csdn.net/download/weixin_38660295/13786240)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值