剑指Offer:翻转链表

题目

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

分析

单链表的翻转实现相对简单一些,我们只需要改变每个节点的指针的指向即可。我们需要定义三个节点:一个指向当前节点,一个用来指向当前节点的后一个节点,另一个用来指向当前节点的前一个节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*
public class ListNode {
int val;
ListNode next = null;

ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if (head == null)
return null;
ListNode newNode = null;
ListNode pNode = head;
ListNode pPrev = null;
while(pNode != null) {
ListNode pNext = pNode.next;
if (pNext == null)
newNode = pNode;
pNode.next = pPrev;
pPrev = pNode;
pNode = pNext;
}
return newNode;
}
}

对于这道题我们要特别注意以下几种特殊情况:

  • 输入的链表为空
  • 输入的链表只有一个节点
请我一杯酸奶?
------ 本文结束感谢您的阅读-------------
0%