剑指Offer_编程题
反转链表
输入一个链表,反转链表后,输出新链表的表头。
//链表结点
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
//反转链表
ListNode* ReverseList(ListNode* pHead) {
if(pHead==NULL || pHead->next==NULL)
return pHead;
ListNode* p,*q,*temp;
p = pHead;
q = temp = NULL;
while(p!=NULL){
ListNode* pNext = p->next;
if(pNext == NULL)
temp = p; //当p的下一个结点为空时表明此时为最后一个结点,即反转后的头结点
p->next = q;
q = p;
p = pNext;
}
return temp;
}
分析:
- 链表为空或只有一个结点,直接返回初始头指针;
- 链表结点大于1,遍历链表,更改结点的next指针指向;