c語言單鏈表反轉


單鏈表反轉可用迭代法,也可用遞歸方法,這里用迭代法(循環)實現。

示意圖如下,其中pre指前一個節點,cur指當前節點,temp為臨時節點。

主要思路就是讓當前節點指向前一個節點,即cur->next=pre,需要事前將cur->next賦值給temp。然后下移即可。

#include <stdio.h>
typedef struct node_s {
    int item;
    struct node_s* next;
}node_t,*link;

//新建節點
link newNode(int item) {
    link new = malloc(sizeof(node_t));
    new->item = item;
    new->next = NULL;
    return new;
}

link Reverse(link header){
    if (header == NULL || header->next == NULL)    {
        return header;}
    link pre; //前一個
    link cur; //當前
    link temp;//臨時變量
    pre = header;
    cur = header->next;
    pre->next = NULL;

    while (cur != NULL)
    {
     temp = cur->next; //temp暫存 cur->next = pre; //cur指向后面實現逆序 pre = cur; //pre后移 cur = temp; //cur后移
    }
    return pre;
}

void printLink(node_t* header){
    while (header != NULL){
        if (header->next != NULL){
            printf("%d->", header->item); //不是最后一個
        }
        else{
            printf("%d", header->item);
        }
        header = header->next;
    }
    printf("\n");
}
int main(int argc, char* argv[]){
    //創建單向鏈接
    node_t *header = NULL, *cur = NULL;
    for (int i = 1; i <= 3; ++i) {
        node_t* new = newNode(i);
        if (header == NULL){
            header = new;
        }
        else{
            cur->next = new;  //加到后面
        }
        cur = new;
    }

    printLink(header); //打印鏈表
    auto newHeader = Reverse(header);  //auto關鍵字,只用在賦值語句中
    printLink(newHeader);
    system("pause");
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM