面试题-链表反转c实现

简介: // ListReverse.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include using namespace std;typedef struct Lis...

// ListReverse.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <malloc.h>
#include <iostream>
using namespace std;

typedef struct List
{
    struct List *next;
    int data;    
}*ListPtr;


void PrintList(ListPtr list)
{
    while(list!=NULL)
    {
        cout<<list->data<<"->";
        list = list->next;
    }
    cout<<endl;
}

ListPtr ReverseList(ListPtr list)
{
    if((list == NULL) || (list->next ==NULL))
    {
        return list;
    }

    ListPtr head = list;
    ListPtr headnext = head->next;
    ListPtr headnextnext = headnext->next;
    head->next = NULL;
    
    while(headnextnext != NULL)
    {
        headnext->next = head;
        head = headnext;
        headnext = headnextnext;
        headnextnext = headnextnext->next;    
    }
    headnext->next = head;
    return headnext;

}


int _tmain(int argc, _TCHAR* argv[])
{
    ListPtr head = (ListPtr)malloc(sizeof(List));
    ListPtr headtemp = head;
    int i=10;
    while(i--)
    {
        headtemp->data = i;
        headtemp = headtemp->next  =  (ListPtr)malloc(sizeof(List));

    }
    headtemp->data = i;
    headtemp->next = NULL;

    PrintList(head);    
    PrintList(ReverseList(head));
    


    return 0;
}


作者: HarlanC

博客地址: http://www.cnblogs.com/harlanc/
个人博客: http://www.harlancn.me/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接

如果觉的博主写的可以,收到您的赞会是很大的动力,如果您觉的不好,您可以投反对票,但麻烦您留言写下问题在哪里,这样才能共同进步。谢谢!

目录
相关文章
|
11月前
|
机器学习/深度学习 算法
24. 两两交换链表中的节点, 19.删除链表的倒数第N个节点 ,面试题 02.07. 链表相交
1. **两两交换链表中的节点**:通过引入虚拟头结点,使所有节点都能采用统一的交换逻辑,避免对头结点单独处理。 2. **删除链表的倒数第N个节点**:利用双指针技巧,让快慢指针保持N个节点的距离,当快指针到达末尾时,慢指针正好指向待删除节点的前一个节点。 3. **链表相交**:先计算两链表长度并调整起点,确保从相同距离末尾的位置开始遍历,从而高效找到相交节点或确定无交点。 以上方法均在时间复杂度和空间复杂度上进行了优化,适合用于理解和掌握链表的基本操作及常见算法设计思路。
|
存储 算法 安全
HashMap常见面试题(超全面):实现原理、扩容机制、链表何时升级为红黑树、死循环
HashMap常见面试题:红黑树、散列表,HashMap实现原理、扩容机制,HashMap的jd1.7与jdk1.8有什么区别,寻址算法、链表何时升级为红黑树、死循环
|
存储 算法 Python
【面试题】合井K个升序链表
【面试题】合井K个升序链表
152 0
|
存储 Java
【Java集合类面试十】、HashMap中的循环链表是如何产生的?
在多线程环境下,HashMap在扩容时如果发生条件竞争,元素的插入顺序可能形成循环链表,导致死循环。
|
存储 算法 索引
链表面试题
链表面试题
137 0
链表面试题
|
存储 SQL 算法
LeetCode 83题:删除排序链表中的重复元素【面试】
LeetCode 83题:删除排序链表中的重复元素【面试】
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 16:反转链表
【一刷《剑指Offer》】面试题 16:反转链表
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
|
机器学习/深度学习
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点