程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> 單向鏈表的創建和逆轉(完整程序)

單向鏈表的創建和逆轉(完整程序)

編輯:關於C

view plain
#include <stdio.h> 
#include <malloc.h> 
typedef struct test 

    int a; 
    struct test *next; 
}lianbiao; 
 
 
lianbiao* create()//創建鏈表 

    lianbiao *head,*temp; 
    int i; 
    printf("請輸入一些整數,以0結束:"); 
    temp=head=(lianbiao *)malloc(sizeof(lianbiao)); 
    scanf("%d",&i); 
    if(i==0) 
    { 
        printf("you input zero!exit now!"); 
        return head; 
    } 
    head->a=i; 
    head->next=NULL; 
    while(1) 
    { 
        scanf("%d",&i); 
        if(i==0)  
            break; 
        else 
           { 
               temp->next=(lianbiao *)malloc(sizeof(lianbiao)); 
               temp=temp->next; 
               temp->a=i; 
               temp->next=NULL; 
           }  
    } 
    return head; 

lianbiao* reverse(lianbiao *p)//逆轉鏈表 

    lianbiao *temp1,*temp2; 
    if(p->next==NULL) 
    { 
        printf("鏈表節點數小於2,無法逆轉!\n"); 
        return p; 
    } 
    int flag=0; 
    while(p->next!=NULL) 
    { 
        if(flag==0) 
        { 
            temp1=p; 
            temp2=p->next; 
            p->next=NULL; 
            p=temp2; 
            flag=1; 
            continue; 
        } 
        temp2=p->next; 
        p->next=temp1; 
        temp1=p; 
        p=temp2; 
    } 
    p->next=temp1;//將原鏈表的末尾節點指向倒數第二個節點 
    return p;  

void print(lianbiao *p) 

    while(p->next!=NULL) 
    { 
        printf("%d ",p->a); 
        p=p->next; 
    } 
    printf("%d ",p->a); 
    printf("\n"); 

int main() 
{  
    lianbiao *temp; 
    temp=create(); 
    print(temp);//打印出原鏈表 
    print(reverse(temp));//打印出逆轉後的鏈表 
    return 0; 

作者“simonjay2007的專欄”
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved