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

来源:互联网 发布:淘宝类目搜索排名 编辑:程序博客网 时间:2024/05/19 17:51

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

两种思路:

思路1:建立节点指针类型堆栈,遍历链表,将指针压栈,顺次出栈,实现反转。这个占用内存空间较大。

思路2:依次遍历链表,改变节点的指向,注意之前要将下一个节点的地址赋值给一个指针next保存。

事实上,next指针表示去掉已经反转的链表的第二个节点,pre指针表示反转过的链表表头,pHead指针表示去掉已经反转的链表的表头。

代码如下:

  //#include <stdio.h>  #include <stdlib.h>  #include <vector>  #include <stack>  #include <math.h>  #include <iostream>using namespace std;struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}};class Solution {public:    ListNode* ReverseList(ListNode* pHead) {    ListNode* pre =NULL;//链表第一元素个元素不存在时,指向空地址ListNode* next = NULL;while(pHead != NULL){next = pHead->next;//保存下一个节点pHead->next = pre;//反转尾链表的头结点pre=pHead;//改变头链表的头结点位置pHead = next;//跟新尾链表的头节点位置}                return pre;                    }}; int main() {    struct ListNode* p = (struct ListNode*)malloc(sizeof(struct ListNode));    struct ListNode* r = (struct ListNode*)malloc(sizeof(struct ListNode));    p->val = 0;    p->next = NULL;    for(int i = 3; i >= 1; i--){     struct ListNode* t = (struct ListNode*)malloc(sizeof(struct ListNode));        t->val = i;        t->next = p->next;        p->next=t;    }     Solution s; r = s.ReverseList(p);     cout << r->val << endl;     system("pause");     return 0; }


阅读全文
0 0
原创粉丝点击