1. 程式人生 > >單鏈表建立,逆序,刪除

單鏈表建立,逆序,刪除

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 typedef struct link{
     int data;
     struct link *next;
 }node;
int main()
{
    int n,i,a[10];
    node *p,*q,*c,*head=NULL;
    scanf("%d",&n);
    for(int i = 1; i <= n; i++)//建立連結串列
    {
        p = (node*)malloc(sizeof(node));//分配空間
        p->next = NULL;//將下一個節點為NULL,當最後一個節點完成,結束
        scanf("%d",&p->data);
        if(head == NULL)
            head = p;
        else
            q->next = p;//圖一解釋
        q = p;
    }


//連結串列的逆序
    p = head;//保住頭結點
    q = p->next;//見圖二
    while(q)
        {
             c = q->next;
             q->next = p;
             p = q;
             q = c;
        }
        head->next=NULL;//原來頭結點已經變成末尾,現在它的下一個為空
        head=p;//p是逆序後的新頭結點,再次將head變為頭結點
    while(head)
        {
            printf("%d",head->data);
            head=head->next;
        }

    head=p;//刪除
    while(head)//見圖三
    {
        q=head->next;
        free(head);
        head=q;
    }
        

        return 0;
}