链表反转笔记

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
  
        //定义一个指针作为当前结点,刚开始要指向头节点
        ListNode *cur = pHead;
        //链表反转,即结点指向改变,令其指向前一个结点。
        //结点指向改变意味着链表会断开,所以要先定义一个指针记录下一个结点的位置
        ListNode *p = nullptr;
        
        //接下来让当前结点指向前一个结点,定义一个指针用来保存前一个结点的位置。
        //由于一开始从头指针开始,所以前一个结点的位置为空
        ListNode *q = nullptr;
        
        while(cur)
        {            
            //每一次循环
           p = cur->next;//先记录当前结点的下一个位置
           cur->next = q;//再改变指向
           q = cur;//先把前一个结点指针挪动到当前指针
           cur = p;//当前指针再挪动到下一个位置
            
        }
        
        return q;//循环结束时,cur已经为空了,所以要返回前一个结点
        
             
    }
};

你可能感兴趣的:(c++,学习笔记,c++,开发语言,后端)