首页 > 编程语言 > 详细

c语言单链表反转

时间:2019-11-23 21:50:19      阅读:111      评论:0      收藏:0      [点我收藏+]

单链表反转可用迭代法,也可用递归方法,这里用迭代法(循环)实现。

示意图如下,其中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; //注意顺序不要错
        cur->next = pre;
        pre = cur;
        cur = temp;
    }
    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");
}

 

c语言单链表反转

原文:https://www.cnblogs.com/imhuanxi/p/11919711.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!