所以,我自学数据结构和算法。在解决一些问题时,我遇到了下面的问题,我必须分离链表的奇偶节点。在C++的链表中分离偶数和奇数节点

以下是问题陈述:

鉴于整数链表,编写一个函数来修改链表,使所有偶数在修改后的链接列表中的所有奇数出现之前。此外,保持偶数和奇数的顺序相同。

我知道这个问题被问了很多次。但我仍然无法找到答案。我知道,有多种方法来解决这个问题,但试图以如下方式

1. Traversing over the original list and moving all the odd elements to new oddlist.

Same time delete those elements from the original list.

2. Now original list should have even elements and oddlist will have odd elements.

3. concatenate original list and oddlist

它看起来直截了当和 我以为只是通过删除节点和调整几个指针可以解决这个问题,要解决这一点,但它不是情况

#include

#include

using namespace std;

struct Node {

int data;

struct Node *next;

};

struct Node *Insert_at_bottom(struct Node* head, int data) {

struct Node *node;

node = new struct Node;

node->data = data;

node->next = NULL;

//node->prev = NULL;

struct Node *temp;

if (head == NULL) {

head = node;

return head;

}

temp = head;

while(temp->next != NULL){

temp = temp->next;

}

temp->next = node;

//node->prev = temp;

return head;

}

struct Node *seperate_elements(struct Node *head) {

struct Node *temp = head;

struct Node *oddhead = NULL;

struct Node *temp1 = NULL;

while (temp != NULL) {

if (temp->data%2 == 0) {

cout << "even:" << temp->data << "\n";

}

else{

cout << "odd:" << temp->data << "\n";

oddhead = Insert_at_bottom(oddhead, temp->data);

// I am messing something here. Not sure what!!!

temp1 = temp->next;

temp->next = temp1->next;

//temp->next = temp->next->next;

free(temp1);

}

temp = temp->next;

}

return oddhead;

}

struct Node *concate_list(struct Node *head, struct Node *oddhead) {

struct Node *temp = head;

while(head->next!=NULL)

{

head = head->next;

}

head->next = oddhead;

return temp;

}

void print_list(struct Node *head){

while(head){

cout << head->data << " ";

head = head->next;

}

}

int main(){

struct Node *head = NULL;

struct Node *head2 = NULL;

struct Node *finalhead = NULL;

head = Insert_at_bottom(head, 1);

head = Insert_at_bottom(head, 2);

head = Insert_at_bottom(head, 8);

head = Insert_at_bottom(head, 4);

head = Insert_at_bottom(head, 5);

head = Insert_at_bottom(head, 7);

head2 = seperate_elements(head);

finalhead = concate_list(head, head2);

//cout << "\n";

print_list(finalhead);

return 0;

}

所以当我执行上面的代码我得到

1 8 4 5 1 5 instead of 2 8 4 1 5 7

现在,我想我失去了一些东西,而d选择节点。不知道我在这里做错了什么。我认为我没有正确照顾指针调整。我非常感谢这里的任何帮助。

感谢,

2016-12-09

kkard

+0

当你删除第一个节点时,你不更新'main'中的'head'。它始终指向节点1. 还有一个稍微复杂一点的算法,如果您想要挑战,可以让它在适当的位置进行。 –

+0

查看链接列表的[* head sentinel * trick](http://www.brpreiss.com/books/opus5/html/page97.html),在头部之前维护一个额外的节点(无负载)更简单的编码(也见[见这里](https://en.wikipedia.org/wiki/Tail_call#Tail_recursion_modulo_cons))。最后一个环节是关于在尾部增加名单;就像Lisp的[The Pitmanual的Sheep trick]一样(http://www.maclisp.info/pitmanual/funnies.html)。 –

c++语言偶数分离,在C++的链表中分离偶数和奇数节点相关推荐

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

    给定一个单链表,把所有的奇数节点和偶数节点分别排在一起.请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性. 请尝试使用原地算法完成.你的算法的空间复杂度应为 O(1),时 ...

  2. 剑指 Offer 22. 链表中倒数第k个节点(C语言)

    输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6 ...

  3. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...

    点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...

  4. 22 链表中倒数第k个节点

    22 链表中倒数第k个节点 为了实现只遍历一次就能找到倒数第kkk个节点,我们可以定义两个指针.第一个指针从链表的头指针开始遍历向前走k−1k-1k−1步,第二个指针保持不动:从第kkk步开始,第二个 ...

  5. 剑指offer:面试题22. 链表中倒数第k个节点

    题目:链表中倒数第k个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1 ...

  6. 链表中倒数第k个节点

    链表中倒数第k个节点 [题目]: 输入一个链表,输出该链表中倒数第k个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6.这个链表的倒数第 3 个节点是值为 4 ...

  7. 链表中倒数第k个节点 1

    题意: 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5. ...

  8. 【每日一题】剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点

  9. LeetCode-剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点 思路一:利用快慢双指针 /*** Definition for singly-linked list.* struct ListNode {* int ...

最新文章

  1. C# Post数据和接收简单示例【转】
  2. ipsec在企业网中的应用(IKE野蛮模式)
  3. MySQL集群中主从切换
  4. iis url重写 域名跳转子目录_逐浪CMS小哥整理IIS设置URL重写,实现页面的跳转的重定向方法...
  5. 面试题 - 两个页面间如何传递数据
  6. 网页上点击java没反应_JavaScript_javascript:void(0)点击登录没反应怎么解决,巧用批处理解决IE不支持JavaScri - phpStudy...
  7. 使用git pull文件时和本地文件冲突怎么办?
  8. 结合 AOP 轻松处理事件发布处理日志
  9. 领域应用 | 知识图谱数据构建的“硬骨头”,阿里工程师如何拿下?
  10. Maven学习总结(51)——Maven 常用属性和常量说明
  11. 《MATLAB信号处理超级学习手册》——2.7 本章小结
  12. iOS开发中遇到的一些优化手段(即时更新)
  13. ECMAScript 基础--原始值和引用值
  14. 机器学习Scikit-Learn基本操作实战
  15. CONFIG_ARM64_MODULE_PLTS 的作用
  16. mysql的sqlhelper_SqlHelper
  17. java企业公文流转系统ssm框架
  18. Construct2太空射击游戏-Debug
  19. 【cocos2d-x 2】关于CocosStudio编辑出的csb的简单使用
  20. 以太坊ETH(windows)配置

热门文章

  1. 微软再次“封杀” Flash Player!
  2. 中关村开发者社区代表向全球发出这样一份倡议!
  3. 实现自我隐藏 CPU 利用率的最佳方法,不妨一试!
  4. Netscape 重构软件倒闭了,但我仍坚定地站重写!
  5. 我佛了!用 KNN 实现验证码识别,又 Get 到一招
  6. 阿里平头哥科学家亲述 RISC-V 2019 Summit 十大心得!
  7. @程序员,如何解决开发和运维之间的固有隔阂?
  8. 观点 PK | 商用 PC or 消费 PC,开发者究竟该如何取舍?
  9. 数十篇推荐系统论文被批无法复现:源码、数据集均缺失!
  10. 优秀的程序员是如何诞生的?