题目描述:
输入一个链表,反转链表后,输出链表的所有元素。
实现如下:
//此题在线用例还是无头链表→_→ //1<-2<-3 4->5 // p s q //保证三个指针指向相邻的三个节点 //健壮性: //1.传入空指针 //2.链表中只有一个节点 /*节点结构体定义 struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; */ class Solution { public: ListNode* ReverseList(ListNode* pHead) { if (pHead == NULL) return NULL;//放置传入空指针 ListNode *p = pHead; ListNode *s = pHead->next; ListNode *q = pHead; p->next = NULL;//首先将第一个节点的next赋值为NULL while (s != NULL)//判断是否还有为反转节点 { q = s->next;//预先保存s的next s->next = p;//连到已反转链表 p = s;//指向已反转链表的第一个节点 s = q;//指向未反转链表的第一个节点 } return p; } }; //使用两个指针,用pHead代替上面方法的p的作用 class Solution { public: ListNode* ReverseList(ListNode* pHead) { if (pHead == NULL) return NULL; ListNode *p = pHead; ListNode *s = pHead->next; pHead->next = NULL; while (s != NULL) { p = s; s = s->next;//保存下一个未反转节点 p->next = pHead; pHead = p; } return pHead; } };