链表习题

假设有一个循环链表的长度大于1,且表中既无头结点,也无头指针。已知S为指向链表中某结点的指针。试编写算法,在链表中删除指针S所指结点的前驱结点

#include
#include

typedef int ElemType;
typedef struct node
{
    ElemType data;
    struct node *next;
}LNode,*LinkList;

LinkList delete_PreNode(LinkList node)
{
    if(node==NULL)
        return NULL;
    else if(node->next==NULL)
    {
        return node;
    }else
    {
        LinkList p=node;
        LinkList q;
        while(p->next!=node)
        {
            q=p;
            p=p->next;
        }
        q->next=p->next;
        free(p);
    }
    return node;
}

void print(LinkList node)
{
    LinkList m=node;
    do{
        printf("%d\t",m->data);
        m=m->next;
    }while(m!=node);
}

int main()
{
    LNode n1,n2,n3,n4,n5;
    n1.data=1;
    n2.data=2;
    n3.data=3;
    n4.data=4;
    n5.data=5;
    n1.next=&n2;
    n2.next=&n3;
    n3.next=&n4;
    n4.next=&n5;
    n5.next=&n1;
    print(&n1);
    getchar();
    delete_PreNode(&n3);
    print(&n1);
    getchar();
}

你可能感兴趣的:(算法)