单链表(面试算法题1)---学习链表的关键在于code

简介: 单链表(面试算法题1)---学习链表的关键在于code

先把单链表构建起来

链表的结点结构体:

struct node{
    int     value;
    node    *next;
};
typedef node*Node;

单链表的初始化

Node init(){
    Node head = NULL;
    Node p = NULL;
    int tmp;
    cin>>tmp;
    head = new node;
    head->value = tmp;
    head->next = NULL;
    p = head;
    while(cin>>tmp){
        Node s = new node;
        s->value = tmp;
        s->next = NULL;
        p->next = s;
        p=s;
    }
    return head;
}

单链表的打印

void printList(Node head){
    if(head == NULL){
        return;
    }
    Node p = head;
    while(p != NULL){
        cout<<p->value<<" ";
        p = p->next; 
    }
}

单链表释放结点(C++没有垃圾回收机制-->不然会导致内存泄漏)

void delList(Node head){
    Node p = head->next;
    while(p!=NULL){
        delete head;
        head = p;
        p = p->next;
    }
    delete head;
    head = NULL;
}

好了,let's

==>面题1

反转单链表

/*
*    通过三个指针来完成,
*    pre用于指向前一个
*    next用于指向下一个
*    head用于指向要换指向的那一个
*
*/
Node reverseLinkedList(Node head){
    Node pre = NULL;
    Node next = NULL;
    while(head != NULL){
        next = head->next;
        head->next = pre;
        pre = head;
        head = next;
    } 
    return pre;
}

==>面题2

删除单链表中的某个值

Node removeValue(Node head,int elem){
    Node s = NULL;
    //先处理头部是elem的元素
    while(head != NULL){
        if(head->value != elem){
            break;
        }
        s = head;
        head = head->next;
        delete s;
        s = NULL;
    }
    //处理有elem的结点
    Node p = head;
    Node cur = head;
    while(cur != NULL){
        if(cur->value == elem){
            s = cur;
            p->next = cur->next;
            cur = cur->next;
            delete s;
            s = NULL;
        }else{
            p = cur;
            cur = cur->next;
        }
    }
      return head;
}

主函数

int main()
{
    Node head = NULL;
    head = init();
    printList(head);
    cout<<endl;
    //????
    head = reverseLinkedList(head);
    printList(head);
    cout<<endl;
    //???????
    head = removeValue(head,3);
    printList(head);
    delList(head);
    system("pause");
    return 0;
}
相关文章
|
10月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
284 0
|
9月前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
366 1
|
机器学习/深度学习 算法
24. 两两交换链表中的节点, 19.删除链表的倒数第N个节点 ,面试题 02.07. 链表相交
1. **两两交换链表中的节点**:通过引入虚拟头结点,使所有节点都能采用统一的交换逻辑,避免对头结点单独处理。 2. **删除链表的倒数第N个节点**:利用双指针技巧,让快慢指针保持N个节点的距离,当快指针到达末尾时,慢指针正好指向待删除节点的前一个节点。 3. **链表相交**:先计算两链表长度并调整起点,确保从相同距离末尾的位置开始遍历,从而高效找到相交节点或确定无交点。 以上方法均在时间复杂度和空间复杂度上进行了优化,适合用于理解和掌握链表的基本操作及常见算法设计思路。
|
算法 Java 关系型数据库
校招 Java 面试基础题目解析及学习指南含新技术实操要点
本指南聚焦校招Java面试,涵盖Java 8+新特性、多线程与并发、集合与泛型改进及实操项目。内容包括Lambda表达式、Stream API、Optional类、CompletableFuture异步编程、ReentrantLock与Condition、局部变量类型推断(var)、文本块、模块化系统等。通过在线书店系统项目,实践Java核心技术,如书籍管理、用户管理和订单管理,结合Lambda、Stream、CompletableFuture等特性。附带资源链接,助你掌握最新技术,应对面试挑战。
264 2
|
算法 数据可视化 开发者
为什么要学习数据结构与算法
今天,我向大家介绍一门非常重要的课程——《数据结构与算法》。这门课不仅是计算机学科的核心,更是每一位开发者从“小白”迈向“高手”的必经之路。
为什么要学习数据结构与算法
|
存储 算法 Java
算法系列之递归反转单链表
递归反转链表的基本思路是将当前节点的next指针指向前一个节点,然后递归地对下一个节点进行同样的操作。递归的核心思想是将问题分解为更小的子问题,直到达到基本情况(通常是链表末尾)。
535 5
算法系列之递归反转单链表
|
算法
面试场景题:如何设计一个抢红包随机算法
本文详细解析了抢红包随机算法的设计与实现,涵盖三种解法:随机分配法、二倍均值法和线段切割法。随机分配法通过逐次随机分配金额确保总额不变,但易导致两极分化;二倍均值法优化了金额分布,使每次抢到的金额更均衡;线段切割法则将总金额视为线段,通过随机切割点生成子金额,手气最佳金额可能更高。代码示例清晰,结果对比直观,为面试中类似算法题提供了全面思路。
2116 16
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
3024 11
架构学习:7种负载均衡算法策略
|
算法 安全 Java
Java线程调度揭秘:从算法到策略,让你面试稳赢!
在社招面试中,关于线程调度和同步的相关问题常常让人感到棘手。今天,我们将深入解析Java中的线程调度算法、调度策略,探讨线程调度器、时间分片的工作原理,并带你了解常见的线程同步方法。让我们一起破解这些面试难题,提升你的Java并发编程技能!
701 16
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】