链表逆序 代码(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
时间: 2024-10-15 15:29:18