题目描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
解题思路
这道题其实和求链表倒数第k个结点的解法相同,就是设置两个结点,这两个结点一前一后,比如p在后,q在前,那么在q不为null时,代表还没到链表的最后,将q的指针指向p,如果p为头结点,则指针指向null,在更改指针时需要注意先用temp存储q,然后将q推至下一位,再改变temp的指针,否则如果直接改变q的指针会导致q.next回到p的位置。
代码部分
以下为代码展示:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode p=head;
if(head==null){
return null;
}
ListNode q=head.next;
head.next=null;
while(q!=null){
ListNode temp=q;
q=q.next;
temp.next=p;
p=temp;
}
return p;
}
}