一、题目描述
输入一个链表,反转链表后,输出新链表的表头。
二、解题思路
需要额外的两个“指针”(java里没有指针这个概念,暂且用来理解),第一个指针temp用来指向链表已经逆序了的部分的头部,指针nextNode用来指向未逆序的部分的头部,不断地将nextNode链表部分的结点一个一个地给了temp链表部分。
三、可运行代码(java)
/**
*
*/
package 剑指offer;
import java.util.List;
/**
* @author ghd
* @Date 2018年7月20日
* @version 1.00
* @description: 反转链表
*/
// 输入一个链表,反转链表后,输出新链表的表头。
public class Solution_15 {
public ListNode ReverseList(ListNode head) {
ListNode temp = null, nextNode = head;
while (nextNode != null) {
nextNode = head.next;
head.next = temp;
temp = head;
head = nextNode;
}
head = temp;
return head;
}
public static void main(String[] args) {
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
Solution_15 s = new Solution_15();
ListNode re = s.ReverseList(head);
//输出逆序后的链表
for(int i = 0;i<5;i++){
System.out.println(re.val);
re = re.next;
}
}
}