- 描述
- 示例1
- 示例2
- 解法1
- 解法2
- 代码
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 #include <cstdlib> 10 class Solution { 11 public: 12 ListNode* ReverseList(ListNode* pHead) { 13 //解法一 14 //添加头结点 15 ListNode* p=(ListNode*)malloc(sizeof(ListNode)); 16 p->next=nullptr; 17 //头插法 18 ListNode *q=pHead; 19 ListNode *r=q->next; 20 while(q){ 21 r=q->next;//暂存q的下一节点 22 q->next=p->next; 23 p->next=q; 24 q=r; 25 } 26 return p->next; 27 //解法二 28 // //特殊情况判断 29 // if(pHead==nullptr) return pHead; 30 // //如例题,p,q记录节点1,2位置,r,s记录节点2,3位置 31 // ListNode *p=pHead; 32 // ListNode *q=p->next; 33 // ListNode *r=q; 34 // ListNode *s=r->next; 35 // pHead->next=nullptr;//头结点的next置空 36 // while(q){ 37 // //为节点2,3的反转做准备 38 // r=q; 39 // s=r->next; 40 // //节点1,2反转 41 // q->next=p; 42 // //p,q又成为节点2,3的位置 43 // p=r; 44 // q=s; 45 // } 46 // return p;//最终p指向最后一个节点,q指向空 47 } 48 };
标签:ListNode,反转,next,链表,pHead,节点 From: https://www.cnblogs.com/yueshengd/p/17367597.html