首页 > 试题广场 >

已知head指向一个带头节点的单向链表,链表中每个节点包含整

[问答题]
已知head指向一个带头节点的单向链表,链表中每个节点包含整型数据域(date)和指针域(next)。链表中各节点按数据域递增链接,设计一个函数删除链表中数据域值相同的节点,使之保留一个。
推荐
先让q指向第一个数据节点,p指向 * q的后续节点,p不为空时循环:若p->date==q->date,则删除 *p,并再让p指向 *q的后续节点,否则p和q同步后移。函数设计如下:
#include <stdio.h>
#include <malloc.h>
typedef int Datetype;
typedef struct node
{   Datetype date;
    struct node * next;
} LinkNode;
void delnode(LinkNode * head)
{
    LinkNode * p, * q;
    q=head->next;                     /*q指向第一个数据节点*/
    if (q==NULL)                   /*为空表时返回*/
        return;
    p=q->next;                       /*p指向*q的后续节点*/
    while (p!=NULL)
        if(p->date==q->date)        /*若*p与*q的值相等,则删除*p*/
        {    q->next=p->next;
           free(p);
           p=q->next;        /*p指向*q的后续节点*/
        }
        else                      /*否则p和q同步后移*/
        {    q=p;
            p=p->next;
        }
}

发表于 2018-05-07 20:42:02 回复(0)