这个题目是要把链表的头尾全部调转方向,其实其中的操作和数组的题目有异曲同工之妙,当我们要调转链表指向的方向时,我们总是需要要有两个节点同时参与操作,同时还要有一个临时节点用来存储原本的下一个节点,因此我们和数组一样需要用到双指针的方法,这个题目就是用了双指针。
定义两个指针,一个cur指向head,一个pre先初始化为null,pre永远是cur节点的上一个节点,通过cur和pre的移动遍历整个链表,从而达到反转链表的目的,代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur=head;
ListNode pre=null;
ListNode temp=null;
while(cur!=null)
{
temp=cur.next;
cur.next=pre;
pre=cur;
cur=temp;
}
return pre;
}
}