编程算法 - 链表逆序 代码(C)

链表逆序 代码(C)


本文地址: http://blog.csdn.net/caroline_wendy


链表逆序, 作为链表操作的基础必须要熟练手写.

主要包含3个部分, 一个指针记录后面节点, 一个指针记录前面节点, 把当前节点指到前面节点, 移动到后面节点, 前后指针依次移动.

非递归链表逆序算法的核心代码只有10行.


代码:

/*
 * main.cpp
 *
 *  Created on: 2014.9.12
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/


#include <stdio.h>
#include <stdlib.h>

struct ListNode{
    int data;
    ListNode* next;
};

void PrintList(ListNode* head);
ListNode* ReverseList(ListNode* head);

int main()
{
	ListNode* head = new ListNode();
	ListNode* node1 = new ListNode();
	ListNode* node2 = new ListNode();
	ListNode* node3 = new ListNode();
	ListNode* node4 = new ListNode();
	head->data = 0;
	head->next = node1;
	node1->data = 1;
	node1->next = node2;
	node2->data = 2;
	node2->next = node3;
	node3->data = 3;
	node3->next = node4;
	node4->data = 4;
	node4->next = NULL;
	PrintList(head);
	ListNode* re = ReverseList(head);
	PrintList(re);
	return 0;
}

ListNode* ReverseList(ListNode* head)
{
    if(head == NULL || head->next == NULL) {
       return head;   /*链表为空或只有一个元素则直接返回*/
    }

    ListNode* prev = NULL;
    ListNode* next = NULL;

    while (head != NULL) {
    	next = head->next;
    	head->next = prev;
    	prev = head;
    	head = next;
    }

    return prev;
}

void PrintList(ListNode* head)
{
    while(head != NULL)
    {
        printf("%d ", head->data);
        head = head->next;
    }
    printf("\n");
}

输出:

0 1 2 3 4 
4 3 2 1 0 







  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SpikeKing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值