单向链表逆序

之前类似的情况碰到过好多次,自己也解决过,不知怎么到了笔试的时候反而会写错。

这样给我一个编译器,一切靠它来搞定的想法还是太幼稚啊。

#include <iostream>
using namespace std;

typedef struct ListNode{
    int data;
    struct ListNode* next;
}*List;
void printList(ListNode* head);
List ReList(List head);
int main()
{
    ListNode *head,*p,*q;
    head=new ListNode;
    head->data=0;
    head->next=NULL;
    p=head;
    for (int i=1;i<10;i++)
    {
        q=new ListNode;
        q->data=i;
        q->next=NULL;
        p->next=q;
        p=q;
    }
    printList(head);
    List back=ReList(head);
    printList(back);
    system("pause");
    return 0;
}

List ReList(List head)
{
    List next,prev=NULL;

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

}

void printList(ListNode* head)
{

    while(head)
    {
        cout<<head->data<<‘ ‘;
        head=head->next;
    }
    cout<<endl;

}
时间: 2024-10-28 20:26:23

单向链表逆序的相关文章

如何实现一个高效的单向链表逆序输出?(详解)

需要考虑因素,高效应权衡多方面因素 数据量是否会很大 空间是否有限制 原始链表的结构是否可以更改 时间复杂度是否有限制 一个链表节点需要输出的元素有多个,例如链表中存的是自定义对象,有多个字段 题目. 01. 先学着实现一个简单的Java版的单项链表构建任意长度的任意数值的链表, 头插法,顺序遍历输出链表 package com.szs.list; /** * 单链表 * @author Administrator * */ public class MyLinkedList { public

[2013] 链表逆序

题目二:逆序链表输出. 题目描述:   将输入的一个单向链表,逆序后输出链表中的值.链表定义如下: typedef struct tagListNode  {        int value;        struct tagListNode *next;  }ListNode;   要求实现函数:   void converse(ListNode **head); [输入]head:    链表头节点,空间已经开辟好 [输出]head:    逆序后的链表头节点 [返回]无 [注意]只需要

链表逆序+判断链表是否回文

单链表逆序详解 1.具有链表头的单链表 假设需要逆序的单链表为: 则逆序以后的链表为: 过程: (1)取p1指向header->next (p1=stu->next);p2保留p1->next(p2=p1->next);将p1->next置为NULL,因为单链表逆序以后,当前的p1节点为尾节点 p1->next=NULL; (2)取p3保留p2->next (p3=p2->next);将p2插入p1之前(p2->next = p1);p1指向p2指向的

链表逆序输出 ---九度1511

题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点.第一行是链表第一个节点的值,依次类推.当输入到-1时代表链表输入完毕.-1本身不属于链表. 输出: 对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行. 样例输入: 1 2 3 4 5 -1 样例输出: 5 4 3 2 1 解题思路: 方法一:直接用数组存储数据,然后反向输出,不过好像通不过.为什么? 方法二:利用

华为机试题-- 单链表逆序

[问题] 单链表逆序 [代码] #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct ListNode { int value; struct ListNode *next; }ListNode; typedef struct ListNode *List; List reverseList(List head) //列表逆序 { ListNode *rear, *curr,

单链表逆序或者逆序输出

分为两种情况,一种是只逆序输出,实际上不逆序:另一种是把链表逆序. ********************逆序输出*********************** 1 #include<iostream> 2 #include<stack> 3 #include<assert.h> 4 using namespace std; 5 6 7 typedef struct node{ 8 int data; 9 node * next; 10 }node; 11 12 //

链表逆序 和 寻找链表中间节点

已知链表的头节点为head,写一个函数把链表逆序. void reserve(list_node* head){ if(head == NULL) return 0; list_node* p = head; list_node* q = p->next; list_node* r = NULL; while(q){ r = q->next; q->next = p; p = q; q = r; } head->next == NULL; head = p; } 找出单链表的中间节

[链表常用技巧]链表逆序+链表中点

链表逆序 给定一个链表,一般的逆序的方法要设置三个指针,这种操作很繁琐,下面总结一种简单的方法: 为链表设置一个头结点,然后head后面的节点依次的插入到head结点之前.最后完成链表的逆序. 代码实现: ListNode* reverseList(ListNode* head) { if(head == NULL) return NULL; ListNode dummy(-1); dummy.next = head; ListNode *pre = dummy.next; while(pre-

链表 - 单链表逆序

单链表逆序是经典的链表操作算法,单链表逆序的算法思想是将链表箭头反指(假设next指针是一个箭头),即所谓的改链,改链过程如下. 逆序前: head-->......prev-->cur-->next-->......->NULL 逆序后: NULL<--......prev<--cur<--next<--......head 算法逻辑: 1.空链表或只有一个元素,返回原链表head. 2.定义3个指针prev.cur.next,初始化时,prev指向