码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-09-16 12:44:10      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:mystra   编程算法   链表逆序   非递归   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 




bubuko.com,布布扣



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

标签:mystra   编程算法   链表逆序   非递归   c++   

原文地址:http://blog.csdn.net/caroline_wendy/article/details/39314465

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!