将单链表元素逆置 C语言

蔚落 2022-09-09 06:08 244阅读 0赞

函数fun的功能是将不带头结点的单向链表逆置。

即若原链表中从头至尾结点数据域依次为:2、4、6、8、10

逆置后,从头至尾结点数据域依次为:10、8、6、4、2

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 5
  4. typedef struct node {
  5. int data;
  6. struct node *next;
  7. } NODE;
  8. NODE *fun(NODE *h) {
  9. NODE *p, *q, *r;
  10. p = h;
  11. if (p == NULL)
  12. return NULL;
  13. q = p->next;
  14. p->next = NULL;
  15. while (q) {
  16. r = q->next;
  17. q->next = p;
  18. p = q;
  19. q = r;
  20. }
  21. return p;
  22. }
  23. NODE *creatlist(int a[]) {
  24. NODE *h, *p, *q;
  25. int i;
  26. h = NULL;
  27. for (i = 0; i < N; i++) {
  28. q = (NODE *)malloc(sizeof(NODE));
  29. q->data = a[i];
  30. q->next = NULL;
  31. if (h == NULL)
  32. h = p = q;
  33. else {
  34. p->next = q;
  35. p = q;
  36. }
  37. }
  38. return h;
  39. }
  40. void outlist(NODE *h){
  41. NODE *p;
  42. p = h;
  43. if (p == NULL)
  44. printf("The list is NULL!\n");
  45. else {
  46. printf("\tHead");
  47. do {
  48. printf("->%d", p->data);
  49. p = p->next;
  50. } while (p != NULL);
  51. printf("->End\n");
  52. }
  53. }
  54. int main(){
  55. NODE *head;
  56. int a[N] = {2, 4, 6, 8, 10};
  57. head = creatlist(a);
  58. printf("The original list:\n");
  59. outlist(head);
  60. head = fun(head);
  61. printf("The list after inverting:\n");
  62. outlist(head);
  63. }

运行结果:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAUGxlYXNlIFNpdCBEb3du_size_8_color_FFFFFF_t_70_g_se_x_16

发表评论

表情:
评论列表 (有 0 条评论,244人围观)

还没有评论,来说两句吧...

相关阅读

    相关 元素 C语言

    函数fun的功能是将不带头结点的单向链表逆置。 即若原链表中从头至尾结点数据域依次为:2、4、6、8、10 逆置后,从头至尾结点数据域依次为:10、8、6、4、2

    相关 实现(C++)

    对于单链表的逆置有两种方法可以实现 (1)利用辅助指针实现 基本思想:在遍历结点的过程中,设置辅助指针,用于记录先前遍历的结点。这样依次遍历的过程中只需修改其后继结点的ne

    相关 C语言实现

    单链表的逆置是一个非常经典的问题,这里利用两个思想进行解决。 首先,我们需要看下原理图,其实两个思想都是一样的,都是使后一个的节点的 next 指针指向前一个节点,依次递