15 反转链表ReverseList

输入一个链表,反转链表后,输出新链表的表头。

 1 import java.util.*;
 2 /*
 3 public class ListNode {
 4     int val;
 5     ListNode next = null;
 6
 7     ListNode(int val) {
 8         this.val = val;
 9     }
10 }*/
11 public class Solution {
12     public static ListNode ReverseList(ListNode head) {
13         ListNode nextnode = null;
14         ListNode prenode = null;
15         while(head!=null){
16             nextnode = head.next;
17             head.next = prenode;
18             prenode = head;
19             head = nextnode;
20         }
21         return prenode;
22     }
23     public static void main(String [] args){
24         Scanner sc = new Scanner(System.in);
25         System.out.println("请依次输入链表");
26         ListNode head = null;
27         if(sc.hasNext())    head = new ListNode(sc.nextInt());
28         ListNode temp = head;
29         while(sc.hasNext()){
30             temp = new ListNode(sc.nextInt());
31             temp = temp.next;
32         }
33         temp.next = null;
34         ReverseList(head);
35     }
36 }

主要是三个指针在操控着反转的链表,A - -> B - -> C - -> D - -> E - -> F

16             nextnode = head.next;
17             head.next = prenode;
18             prenode = head;
19             head = nextnode;

head一开始指向A

nextnode指向了B

A指向了prenode也就是空   A和B之间的链断开

head代表的A给了prenode,现在prenode就是A了,成功实现了A的反转出来

在将B给了head,重新循环就OK

原文地址:https://www.cnblogs.com/shareidea94/p/10850087.html

时间: 2024-10-18 09:51:19

15 反转链表ReverseList的相关文章

15.反转链表

题目描述 输入一个链表,反转链表后,输出新链表的表头. 题目解答 /* 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(hea

[剑指Offer] 15.反转链表

1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 ListNode* ReverseList(ListNode* pHead) { 12 ListNode* p = pHead; 13 ListNode* q = NULL; 14 ListNode* r

【剑指Offer】15、反转链表

题目描述 输入一个链表,反转链表后,输出新链表的表头. 题解一:栈 1 public static ListNode ReverseList(ListNode head) { 2 if(head==null||head.next==null){ 3 return head; 4 } 5 Stack<ListNode> stack = new Stack<>(); 6 ListNode current=head; 7 while (current!=null){ 8 stack.pu

剑指offer(15)反转链表

题目描述: 输入一个链表,反转链表后,输出新链表的表头. 解题代码: /*function ListNode(x){ this.val = x; this.next = null; }*/ function ReverseList(pHead) { // write code here if(pHead == null || pHead.next == null){ return pHead; } //三个指针,pre指向前一个指针,pHead为当前指针,next为下一个指针 var pre =

反转链表——剑指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

链表面试题(一):反转链表的算法实现

关于链表的考察 链表是面试里面经常涉及到的考点,因为链表的结构相比于Hashmap.Hashtable.Concurrenthashmap或者图等数据结构简单许多,对于后者更多面试的侧重点在于其底层实现.比如Hashmap中Entry<k,v>等操作.如何扩容.容量的设定等.链表的考察更侧重于代码的书写和思路的形成.虽然说,链表的结构简单,但是涉及到指针的操作,容易引申出一些挑战性的考题,其中也牵涉到诸多小的细节的考虑,更能看出代码书写的能力和功底. 面试题:反转链表 题目:定义一个函数,输入

【链表】反转链表

输入一个链表,反转链表后,输出链表的所有元素. 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 ReverseList(ListNode head) { 12 13 if (null == head || null ==