• 单链表结点删除


     1 /*
     2     QQ:778138708
     3     date:2020年5月15日
     4     单链表结点删除
     5  */
     6 #include <stdio.h>
     7 #include <stdlib.h>
     8 
     9 struct ListNode {
    10     int data;
    11     struct ListNode *next;
    12 };
    13 struct ListNode *readlist(void);
    14 struct ListNode *deletem(struct ListNode *L, int m);
    15 void printlist(struct ListNode *L);
    16 int main(void)
    17 {
    18     int m;
    19     
    20     struct ListNode *L = readlist();
    21     scanf("%d", &m);
    22     L = deletem(L, m);
    23     printlist(L);
    24     
    25     return 0;
    26 }
    27 //新建一个链表
    28 struct ListNode *readlist(void)
    29 {
    30     struct ListNode *head, *tail, *p;
    31     int n;
    32     
    33     head = tail = NULL;
    34     scanf("%d", &n);
    35     while (n != -1) {
    36         p = (struct ListNode *)malloc(sizeof(struct ListNode));
    37         p->data = n;
    38         p->next = NULL;
    39         
    40         if (head == NULL) {
    41             head = tail = p;
    42         } else {
    43             tail->next = p;
    44             tail = tail->next;
    45         }
    46         
    47         scanf("%d", &n);
    48     }
    49     
    50     return head;
    51 }
    52 //删除,其实是跳过需要删除的结点,重新生成一个新的链表
    53 struct ListNode *deletem(struct ListNode *L, int m)
    54 {
    55     struct ListNode *head, *tail, *p, *temp;
    56     
    57     head = tail = NULL;
    58     p = L;
    59     
    60     while (p) {
    61         temp = p;
    62         p = p->next;
    63         if (temp->data != m) {
    64             if (head == NULL) {
    65                 head = temp;
    66                 head->next = NULL;
    67                 tail = head;
    68             } else {
    69                 tail->next = temp;
    70                 tail = tail->next;
    71                 tail->next = NULL;      //tail等于temp,所以tail->next = NULL
    72             }
    73         }
    74     }
    75     //返回新的链表头
    76     return head;
    77 }
    78 void printlist(struct ListNode *L)
    79 {
    80     struct ListNode *p = L;
    81     
    82     while (p) {
    83         printf("%d ", p->data);
    84         p = p->next;
    85     }
    86     
    87     printf("
    ");
    88 }
  • 相关阅读:
    git ignore文件
    SpringBoot 单元测试junit test
    SpringBoot 使用JPA+MySQL+Thymeleaf 总结 二
    mysql 修改成utf8编码
    mysql 递归查询父节点 和子节点
    SpringBoot jar程序配置成服务运行
    广告系统知识点汇总
    vue 、vue-router实现单页应用
    广告系统项目推进问题汇总
    vue采坑及较好的文章汇总
  • 原文地址:https://www.cnblogs.com/2018jason/p/12893726.html
Copyright © 2020-2023  润新知