问题描述
反转一个单向链表 题目地址
Example
输入: 1->2->3->4->5->null
输出: 5->4->3->2->1->null
思路分析
currNode
当前正在遍历的节点(原链表头节点)prevNode
新链表节点头节点(最初新链表为空所以初始值为null)
因为每次遍历时, 都会修改当前遍历节点的
next
所以每次修改前应该先记录当前的next
即原链表修改后的头节点
ListNode nextTemp = currNode.next;
每一次遍历时, 只需要将
currNode
节点的next
指向prevNode
节点, 即:
currNode.next = prevNode;
此时新链表前面多了一个节点, 所以需要将
prevNode
即:
prevNode = currNode;
代码实现
package com.alan.leetcode;
public class ReverseLinkedList {
public static void main(String[] args) {
ListNode listNode = new ListNode(1);
ListNode head = listNode;
for (int i=2; i<10; i++) {
listNode.next = new ListNode(i);
listNode = listNode.next;
}
ListNode curr = head;
while (curr!=null) {
System.out.print(curr.val+"->");
curr = curr.next;
}
System.out.println((Object) null);
System.out.println("-------------------开始反转------------------------");
Solution solution = new Solution();
ListNode newListNode = solution.reverseList(head);
curr = newListNode;
while (curr!=null) {
System.out.print(curr.val+"->");
curr = curr.next;
}
System.out.println((Object) null);
}
}
class Solution {
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while (curr != null) {
ListNode nextTemp = curr.next;
curr.next = prev;
prev = curr;
curr = nextTemp;
}
return prev;
}
}
/**
* Definition for singly-linked list.
*/
class ListNode {
int val;
ListNode next;
ListNode(int val) {
this.val = val;
}
}
近期评论