手撕代码之反转单链表

今天去际链面试,结果在coding这一关又折了。

那就总结一下吧,就当再手撕一下代码

首先定义一个listNode:

public class listNode {
    int data;
    listNode next;
    public listNode(int data, listNode next) {
        this.data = data;
        this.next = next;
    }
}

定义方法:

public class listNodeReverse {
    public static void main(String[] args) {
        listNode D = new listNode(4, null);
        listNode C = new listNode(3, D);
        listNode B = new listNode(2, C);
        listNode A = new listNode(1, B);
        listNode  node= reverse(A);
        System.out.println("null");
    }
    public static listNode reverse(listNode listnode) {
        //迭代的思想
        listNode pre = null;
        listNode now = listnode;
        while (now != null) {
            listNode next =now.next;
            now.next=pre;
            pre = now;
            now=next;
        }
        return pre;
    }

}

执行结果:

单向链表的反转还有其他高效的方法,欢迎交流学习!!!!!

原文地址:https://www.cnblogs.com/xiaonantianmen/p/9806643.html

时间: 2024-09-30 07:44:29

手撕代码之反转单链表的相关文章

高效代码之反转单链表

单链表的反转是经常用到的 那么单链表的高效转换就很重要了.这里记录一下.方便用时查阅. struct ListNode { int m_nValue; ListNode * m_pNext; }; //实现如下: //反转链表需要3个指针 //1.指向当前元素pNode //2.指向当前元素的前一个元素pPrev //3.指向当前元素的后一个元素pNext ListNode* ReverseList(ListNode* pHead) { ListNode* pReverseHead = NULL

【面试必备】手撕代码,你怕不怕?

Part 1.生产者-消费者问题这绝对是属于重点了,不管是考察对于该重要模型的理解还是考察代码能力,这都是一道很好的考题,所以很有必要的,我们先来回顾一下什么是生产者-消费者问题: 问题简单回顾 如果想学习Java工程化.高性能及分布式.深入浅出.微服务.Spring,MyBatis,Netty源码分析的朋友可以加我的Java高级交流:854630135,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家. 生产者消费者问题(英语:Producer-consumer pr

【LeetCode-面试算法经典-Java实现】【092-Reverse Linked List II(反转单链表II)】

[092-Reverse Linked List II(反转单链表II)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->

算法题:反转单链表

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 题目:存在一个单链表,头指针为head,实现单链表的反转Node *Reverse(Node *head).  该算法的求解办法有很多,如: 方法1:先顺序变量单链表,将结点保存到栈中,在从栈中弹出结点,重新建立一个新的单链表: 方法2:用<剑指offer>里面给出的算法,用三个指针来实现: 方法3:采用递归实现,是方法2的递归实现形式. 本文主要给出方法2和方法3,在给出具体的代码之前,先要注意几个问题:          (1)如果hea

反转单链表并验证(详解)

单链表优点: 可以动态增加和删除. 不需要定义初始大小. 点链表缺点: 不能随机访问.需要逐个遍历直到找到目标项. 用到动态内存分配和指针,代码复杂度提升,内存泄漏和内存段错误风险提升. 开销大较大,因为是动态分配内存.而且每项需要存储一个额外的指针. 定义单链表: ------------------------------ ------------------------------ | | | \ | | | | val | next |--------------| val | next

递归、非递归 反转单链表

定义链表结构 struct ListNode { int val; ListNode *next; ListNode(int v) : val(v), next(NULL) {} }; 非递归反转单链表 ListNode* reverse(ListNode *root) { if (root == NULL || root->next == NULL) return root; ListNode *cur = root->next; root->next = NULL; while (c

C语言:【单链表】逆置反转单链表

#include<stdio.h> #include<assert.h> #include<stdlib.h> typedef int DataType; typedef struct SListNode {     DataType data;     struct SListNode* next; }SListNode; SListNode* BuyNode(DataType x) {     SListNode* next = (SListNode*)malloc

java面试之手撕代码

在最近的面试中,面试官经常要面试者手撕代码,哎奈何本人只知道原理,一到手撕就死乔乔了. 第一题:宜信一面手撕代码之写代码实现一个栈的的前序遍历: 第一步.要构造节点类 public class Node { private int data; private Node leftChild;//左孩子 private Node rightChild;//右孩子 public Node(int data,Node leftChild,Node rightChild){ this.data = dat

Leetcode25---&gt;Reverse Nodes in k-Group(以k个节点为段,反转单链表)

题目: 给定一个单链表,一次反转k个节点,最终返回翻转后的链表的头节点:如果链表不足k个,则不变 举例: Given this linked list: 1->2->3->4->5 For k = 2, you should return: 2->1->4->3->5 For k = 3, you should return: 3->2->1->4->5 解题思路: 1.  首先要确定链表的头节点newHead;即如果链表的节点个数大