13,反转链表《剑指offer》

题目:

输入一个链表,反转链表后,输出链表的所有元素。

思路:

反转链表,对于片段 1--->2--->3循环操作; 要反转链表需要两步:

一,将2->next指向1 (如果不保存3那么此时就丢失了对3的引用)

二,将链表往后移 即 : 1=2; 2=3;3=3->next

注意的点:

一,首节点的next要指向NULL

二:链表的长度可能小于3

代码:

/*
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* newHead;
      ListNode* p1=pHead;
      ListNode* p2=pHead->next;
      ListNode* p3; 
      if(p2!=NULL){
         p3=p2->next;
         p1->next=NULL;
         p2->next=p1;
         while(p3!=NULL){
               p1=p2;
               p2=p3;
               p3=p3->next;
               p2->next=p1;
        }
        newHead=p2;
      }else{
         p1->next=NULL;
         newHead=p1;
      }
      return newHead;
    }
};

  

posted @ 2017-09-13 17:56  llauser  阅读(155)  评论(0)    收藏  举报