翻转一个链表
样例
给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null
挑战
在原地一次翻转完成
思路:
1、建一个新的头指针,将旧链表从头向尾拆卸,拆下来的节点插入新链表的头部。
2、(这个应该是原地)
1->2->3->4->null
2->1->3->4->null
3->2->1->4->null
4->3->2->1->null
/**
* Definition for ListNode.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int val) {
* this.val = val;
* this.next = null;
* }
* }
*/
public class Solution {
/**
* @param head: The head of linked list.
* @return: The new head of reversed linked list.
*/
public ListNode reverse(ListNode head) {
if(null == head || null == head.next) return head;
ListNode p = head, q = head;//q指向逆序部分头节点,p指向逆序部分尾节点,p.next为顺序部分头结点
while(p.next != null) {
head = p.next;
p.next = head.next;
head.next = q;
q = head;
}
return head;
}
}