链表(篇3)链表中将所有的偶数移到奇数后面不改变原来的相对位置
来源:互联网 发布:淘宝真丝针织背心 编辑:程序博客网 时间:2024/05/22 18:24
给定一个整数的链表,写一个函数来修改链表,使得所有偶数出现在修改链表的所有奇数之前。 此外,保持偶数和奇数的顺序相同。
示例:
输入:17-> 15-> 8-> 12-> 10-> 5-> 4-> 1-> 7-> 6-> NULL
输出:8-> 12-> 10-> 4-> 6 - > 17-> 15-> 5-> 1-> 7-> NULL
输入:8-> 12-> 10-> 5-> 4-> 1-> 6-> NULL
输出:8-> 12-> 10-> 4-> 6-> 5-> 1-> NULL
//如果所有数字都是偶数,则不改变列表
输入:8-> 12-> 10-> NULL
输出:8-> 12-> 10-> NULL
//如果所有数字都是奇数,则不改变列表
输入:1-> 3-> 5-> 7-> NULL
输出:1-> 3-> 5-> 7-> NULL
解法1:
取下头结点,顺序取下后面的节点插到头节点后面,当该节点值是偶数时将其插入到最后面,如果是奇数将其插入到所有奇数后面偶数前面。依次遍历所有的节点。
时间复杂度O(N*N);
代码
ListNode Segregate(ListNode head) { ListNode phead=new ListNode(0); ListNode pre=head; ListNode qre=phead; ListNode next; while(pre!=null) { qre=phead; if((pre.val&1)==0) { while(qre.next!= null) { qre=qre.next; } next=pre; pre=pre.next; qre.next=next; next.next=null; //如果是偶数就直接放到新链表的最后面 } else if((pre.val&1)==1){ while(qre.next!=null&&(qre.next.val&1)==1) { qre=qre.next; //如果是奇数,就放到新链表最后一个奇数的后面,第一个偶数的前面 } if(qre.next== null) { next=pre; pre=pre.next; qre.next=next; next.next=null; //如果新链表中没有偶数节点就将节点放在最后 } else { next=pre.next; pre.next=qre.next; qre.next=pre; pre=next; //如果有偶数节点放在偶数节点前面。 } } } return phead.next; }
解法2
先找到链表的最后一个节点,然后再遍历链表,将偶数节点依次连接到最后一个节点后面。要记住标记最后一个节点以便结束遍历。时间复杂度O(N)。
代码
ListNode Segregate(ListNode head,int tag) { ListNode phead=new ListNode(0); ListNode tail; ListNode pre=head; phead.next=head; ListNode qre=phead; ListNode ptail; if(pre==null||pre.next==null) return head; while(pre.next!=null) { pre=pre.next; } tail=pre;//找到最后一个节点 pre=head; ptail=tail; while(pre!=tail.next) { if((pre.val&1)==0) { //当前节点值为偶数时将其放到链表的最后面 qre.next=pre.next; ptail.next=pre; ptail=ptail.next; } else { qre=qre.next; } pre=pre.next; } ptail.next=null; //最后尾指针一定要指向空,不然输出时循环不会结束。 return phead.next; }
0 0
- 链表(篇3)链表中将所有的偶数移到奇数后面不改变原来的相对位置
- 将一个数组中所有的奇数放左边,偶数放右边,且原来数字的相对位置不变
- 第3周项目4-顺序表应用(2)将所在奇数移到所有偶数的前面.
- 将数组的奇数移到前面偶数到后面&&输出链表的倒数第k个结点
- 第三周 项目4:顺序表应用-将所在奇数移到所有偶数的前面
- 调整数组顺序使得奇数位于偶数前面,且奇数与奇数,偶数与偶数之间的位置相对不变
- 调整数组顺序使奇数位于偶数前面,偶数和偶数之间的相对位置不变
- 调整数组顺序使奇数位于偶数前面,偶数和偶数之间的相对位置不变
- 将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并保证奇数之间顺序不变,偶数之间顺序不变(创新工场)
- 将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并保证奇数之间顺序不变,偶数之间顺序不变(创新工场)
- 第三周项目4(2)-顺序表应用 将所有奇数移到所有偶数前面
- 第三周项目4(2)-顺序表应用 将所有奇数移到所有偶数前面
- 第三周项目4(2)-顺序表应用 将所有奇数移到所有偶数前面
- 第三周项目4 顺序表应用(将所有奇数移到偶有偶数前面)
- 将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并使奇数之间顺序反转,偶数之间顺序反转
- 将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并使奇数之间顺序反转,偶数之间顺序反转。
- 将一个数组中奇数放左边偶数放右边,不用考虑数字的相对位置
- 将链表中的所有元素为奇数的节点移到元素为偶数节点的前面,并使奇数之间顺序反转,偶数之间顺序反转(创新工厂涂鸦移动面试题)
- asprintf的头文件没定义
- 【图像特征提取7】SURF特征提取算法的
- js实现动态改变菜单栏颜色(兄弟节点的知识)
- XML—可扩展标记语言(eXtensible Markup Languae)
- cf453 以为是概率论结果没想到是暴力
- 链表(篇3)链表中将所有的偶数移到奇数后面不改变原来的相对位置
- 道德经
- CC2530与tinyos
- 方格填数
- Method的invoke()方法的使用
- 抽象类和接口联系与区别
- Unity 与 .so\.a\.dll库文件、 C\C++\OC\Java 交互
- 一些自己用到的学习网站
- 坐在马桶上看算法:只有五行的Floyd最短路算法