反转链表

节点类:

public class ListNode{
    int val;
    ListNode next = null;

    ListNode(int val){
        this.val = val;
    }
}

反转链表:

public class Solution {
    public ListNode ReverseList(ListNode head) {
        ListNode node = head;  //node为当前操作节点        ListNode rhead = head;  //rhead为反转后的链表头        ListNode b = null;      //node的前一节点
        while(node!=null){
            ListNode p = node.next; //要把节点node的下一个节点保存起来
            if(p==null){
                rhead = node;
            }
            node.next = b;
            b = node;
            node = p;
        }
        return rhead;
    }
}

注意:

1. 反转链表时,一定要保存node(当前操作节点)的下一个节点,否则链表就会断开;

2. 注意反转的顺序,首先保存下一节点p,其次将node的next指向前一节点b,然后将b向前移动到node,最后将node向前移动到p。

时间: 2024-11-06 20:34:07

反转链表的相关文章

【C/C++】反转链表

/* * reverseList.c * * Created on: 2014年6月25日 * Author: wenbo */ #include <iostream> using namespace std; struct Node { Node* next; int data; }; void trace(Node* node) { Node* tmp = node; while (tmp != NULL) { cout << tmp->data << &qu

Leetcode:Reverse Linked List II 反转链表区间

Reverse Linked List II 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->5->NULL. Note:Given m, n satisfy the following

剑指offer六:反转链表

输入一个链表,反转链表后,输出链表的所有元素 public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class Solution { public ListNode ReverseList(ListNode head) { ListNode pre = null; ListNode next = null; while(head != null){

九度_题目1518:反转链表

//后插法建立链表,然后从第二个元素(若有的话)开始依次插入到头结点后面从而达到反转链表的效果 题目描述: 输入一个链表,反转链表后,输出链表的所有元素. (hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数. 输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素. 输出: 对应每个测试案例, 以此输出链表反转后的元素,如没有元素则输出N

反转链表——剑指offer

题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点. 代码: 1 #include<stdio.h> 2 #include"malloc.h" 3 typedef struct node 4 { 5 struct node *next; 6 int data; 7 }*ListNode; 8 9 //尾插法创建链表(不带头结点) 10 ListNode creatrList() 11 { 12 ListNode p = (ListNode)mall

26、输入一个链表,反转链表后,输出链表的所有元素。

输入一个链表,反转链表后,输出链表的所有元素. 思路:  ListNode next = null;//用来保存待反序的第一个节点(head 和 next节点) ListNode pre = null;//用来保存已经反序的第一个结点 next = head.next;//首先记录当前节点的下一个节点,(保存起来) //先用next保存head的下一个节点的信息,保证单链表不会因为失去head节点的原next节点而就此断裂 head.next = pre;//让当前节点指向前一个节点,因为要反序

【剑指offer】十,反转链表

题目描述 输入一个链表,反转链表后,输出链表的所有元素. 分析:此题学过数据结构的应该会首先想到链表建立时所采用的头插法,即每一个新插入进来的点均插在链表头.代码如下: 1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 this.val = val; 8 } 9 }*/ 10 public class Solution { 11 public ListNode R

剑指offer系列源码-反转链表

题目1518:反转链表 时间限制:1 秒内存限制:128 兆特殊判题:否提交:1952解决:741 题目描述: 输入一个链表,反转链表后,输出链表的所有元素. (hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数. 输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素. 输出: 对应每个测试案例, 以此输出链表反转后的元素,如没有元素则输

九度oj题目1518:反转链表

题目1518:反转链表 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2567 解决:948 题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000):代表将要输入的链表的个数.输入的第二行包含n个整数t(0<=t<=1000000):代表链表元素. 输出: 对应每个测试案例,以此输出链表反转后的元素,如没有元素则输