链表快慢指针去重

#include<stdio.h>

#include<stdlib.h>

typedef struct Node

{

    int value;

    struct Node *next;

}Node;

Node *getnewnode(int val){

    Node *p=(Node *)malloc(sizeof(Node));

    p->value=val;

    p->next=NULL;

    return p;

}

void removeNode(Node *head){

    //快慢指针定向移动赋值法

    if(head==NULL||head->next==NULL) return ;

    //这行代码检查链表是否为空或只有一个节点。如果是的话,说明链表中没有重复元素,直接返回。

    Node* slow = head;

    Node* fast = head->next;

    while (fast != NULL) {

        if (slow->value != fast->value) {

            slow->next = fast;

            slow = slow->next;

        }

        fast = fast->next;

    }

    slow->next = NULL;

    return ;

}

void insertNode(Node **head,int val){

    Node *newnode=getnewnode(val);

    if(*head==NULL){

       *head=newnode;

        return ;

    }

    Node *p=*head;//赋初值

    while(p->next){

        p=p->next;

    }

    p->next=newnode;

    return ;

}

void clear(Node *head){

    if(head==NULL) return ;

    for(Node *p=head,*q;p;p=q){

        q=p->next;

        free(p);

    }

    return ;

}

int main(void){

    Node *head=NULL;

    int num;

    scanf("%d",&num);

    int a[101];

    for(int i=0;i<num;i++){

            scanf("%d",&a[i]);

            insertNode(&head,a[i]);

    }

    removeNode(head);

    Node *cur=head;

    printf("Head");

    while(cur!=NULL){

          printf("->%d",cur->value);

          cur=cur->next;

    }

    return 0;

}

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值