day17(反转链表)

题目描述

输入一个链表,反转链表后,输出新链表的表头。
 
 
提交链接: 点击

思路:利用3个指针,一个指向当前节点,一个指向前一个节点,一个指向后一个节点。那么就地反转,就是将当前节点的next指向pre,然后将当前节点设置为前一个节点,让当前节点指向后一个节点(这是为下一轮做准备)。

代码:

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(NULL) {
    }
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
        //头插法实现
        ListNode *pre=NULL,*pnext=NULL;
        while(pHead!=NULL){
            pnext=pHead->next;  //pnext指向下一个节点
            pHead->next=pre;    //当前指针的next应该指向前一个节点
            pre=pHead;          //pre指向当前节点,为下一轮做准备
            pHead=pnext;         //pHead指向下一个节点,为下一轮做准备
        }
        return pre;
    }
};

猜你喜欢

转载自www.cnblogs.com/logo-88/p/9708870.html
今日推荐