反转链表

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

思路:这个题目是一个很经典的链表操作题目,涉及很多链表指针操作,考验代码功底。因为是单向链表,如果按照最普通的思路来解和求链表中的倒数第k个节点一样,会有许多不必要的遍历。那么就需要在指针操作上想办法。下面是一个比较好的解决思路:

首先需要设置4个指针,一个pHead用来保存反转后的头结点,pNode代表当前节点,pPre代表当前节点的前一个节点,pNext代表当前节点的下一个节点。

举个栗子:a->b->c->d->e->f->g->null

当前节点指向a,其他节点暂时为null,然后令pNext指向b,判断pNext是否为null,如果为null则说明已经到链表尾部,令pHead指向pNode,然后令pNext指向pPre。然后再令pPre指向pNode,pNode指向pNext。直到链表尾部退出循环。

实现代码:

/*
public class ListNode {
    int val;
    ListNode next = null;

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

 

你可能感兴趣的:(反转链表)