• 单链表习题(对应章节chapter2)


    题目1:链表的中间结点

    题目来源:leetcode链表的中间结点

    第一种思路分析:考虑指针移动到相应的位置来做

     参考代码:位置(/chapter2/c++/middle-link-list-node/lc1.cc)

    1. #include
    2. extern "C"{
    3. #include
    4. }
    5. link_list_node *middle_node(link_list_node *p_head)
    6. {
    7. //直接用头结点来保存中间结点的地址
    8. if (p_head == NULL)
    9. {
    10. return NULL;
    11. }
    12. int pos = (p_head->value / 2);
    13. //开始移动相应指针,移动到我们想要结点的前一个结点
    14. //然后next就是下一个结点
    15. for (int i = 0; i < pos; i++)
    16. {
    17. p_head = p_head->next;
    18. }
    19. return p_head->next;
    20. }
    21. int main()
    22. {
    23. link_list_node *p_head = create();
    24. //插入12345这几个数据
    25. insert_elem(p_head, 1, p_head->value);//全部在最后一个位置插入
    26. insert_elem(p_head, 2, p_head->value);//全部在最后一个位置插入
    27. insert_elem(p_head, 3, p_head->value);//全部在最后一个位置插入
    28. insert_elem(p_head, 4, p_head->value);//全部在最后一个位置插入
    29. insert_elem(p_head, 5, p_head->value);//全部在最后一个位置插入
    30. insert_elem(p_head, 6, p_head->value);//全部在最后一个位置插入
    31. //打印一下
    32. print_list(p_head);
    33. p_head = middle_node(p_head);
    34. while (p_head != NULL)
    35. {
    36. printf("%d ", p_head->value);
    37. p_head = p_head->next;
    38. }
    39. //我们要的是中间结点
    40. return 0;
    41. }

    这里说一下我用到自己之前写的一个单链表的动态库,不会的同学可以参考我在Linux专栏动态库与静态库制作,后面就不在多说了

    下面是Lc提交代码

    1. /**
    2. * Definition for singly-linked list.
    3. * struct ListNode {
    4. * int val;
    5. * struct ListNode *next;
    6. * };
    7. */
    8. struct ListNode* middleNode(struct ListNode* p_head){
    9. //直接用头结点来保存中间结点的地址
    10. if (p_head == NULL)
    11. {
    12. return NULL;
    13. }
    14. //按照lc提交的意思就是
    15. //p_head->val返回的不是长度
    16. //所以需要我们自己来计算长度
    17. int len = 0;
    18. struct ListNode *p_node = p_head;
    19. while (p_node != NULL)
    20. {
    21. p_node = p_node->next;
    22. len++;
    23. }
    24. len = (len / 2);
    25. //开始移动相应指针,移动到我们想要结点的前一个结点
    26. //然后next就是下一个结点
    27. for (int i = 0; i < len; i++)
    28. {
    29. p_head = p_head->next;
    30. }
    31. return p_head;
    32. }

     运行结果:

    文章持续更新中。。。。。。 

  • 相关阅读:
    移动通信覆盖自愈的研究与实现
    Python学习----Day07
    随机数生成过慢导致系统阻塞怎么办?
    牛视系统源码定制,抖音矩阵系统定制开发。come here
    2-SAT
    vue - Vue路由(扩展)
    忆联再次与 OpenCloudOS 完成产品兼容性互认证
    零信任策略下K8s安全监控最佳实践(K+)
    Java this关键字的3种用法
    第三百六十五回
  • 原文地址:https://blog.csdn.net/Pxx520Tangtian/article/details/133718262