zoukankan      html  css  js  c++  java
  • 15、剑指offer--反转链表

    题目描述
    输入一个链表,反转链表后,输出链表的所有元素。
     
    解题思路:该题需要定义三个指针,分别记录当前结点、前一结点、下一结点。
    反转过程中,先获得下一结点,然后让当前结点下一个指向前一结点,下一个前一结点为当前结点,当前结点为下一结点。注意如果下一结点为空,则当前结点为为最后一个结点,即返回的头指针。
     1 #include <iostream>
     2 #include <malloc.h>
     3 using namespace std;
     4 struct ListNode {
     5     int val;
     6     struct ListNode *next;
     7     ListNode(int x) :
     8             val(x), next(NULL) {
     9     }
    10 };
    11 class Solution {
    12 public:
    13     //需要定义三个指针、当前节点、前一个节点、后一个节点
    14     ListNode* ReverseList(ListNode* pHead) {
    15         ListNode *pre = NULL;
    16         ListNode *pNode = pHead;
    17         ListNode *pReverseHead = pHead;
    18         while(pNode != NULL)
    19         {
    20             ListNode *pNext = pNode->next;//保存下一结点
    21             if(pNext == NULL)//下一结点为空
    22             {
    23                 pReverseHead = pNode;//当前结点为最后一个结点,即为返回的头指针
    24             }
    25             pNode->next = pre;//当前结点下一个指向前一个结点
    26             pre = pNode;//前一结点为当前结点
    27             pNode = pNext;//当前结点后移
    28 
    29         }
    30         return pReverseHead;
    31     }
    32 };
    33 ListNode *CreateList(int n)
    34 {
    35     ListNode *head;
    36     ListNode *p,*pre;
    37     int i;
    38     head=(ListNode *)malloc(sizeof(ListNode));
    39     head->next=NULL;
    40     pre=head;
    41     for(i=1;i<=n;i++)
    42     {
    43         p=(ListNode *)malloc(sizeof(ListNode));
    44         cin>>p->val;
    45         pre->next=p;
    46         pre=p;
    47     }
    48     p->next=NULL;
    49 
    50     return head->next;
    51 }
    52 /*-------------------------输出链表-----------------------------------*/
    53 void PrintList(ListNode *h)
    54 {
    55     ListNode *p;
    56 
    57     p=h;//不带空的头结点
    58     while(p)
    59     {
    60         cout<<p->val<<" ";
    61         p=p->next;
    62         cout<<endl;
    63     }
    64 }
    65 int main()
    66 {
    67     int n1;
    68     ListNode *h1;
    69     cout<<"输入链表的结点数目"<<endl;
    70     cin>>n1;
    71     h1 = CreateList(n1);
    72     cout<<"链表为:"<<endl;
    73     PrintList(h1);
    74     cout<<"反转后链表为:"<<endl;
    75     Solution s;
    76     h1 = s.ReverseList(h1);
    77     PrintList(h1);
    78     return 0;
    79 }

  • 相关阅读:
    数据库
    流式布局
    ScrollView简单用法
    ADB被占用解决办法
    安卓中shape中的属性大全
    sql语句replace into的用法
    debug
    大数据量数据库优化
    Gson解析后的数据存到本地数据库 耗时的问题
    数据同步异步加载handler Looper
  • 原文地址:https://www.cnblogs.com/qqky/p/6859815.html
Copyright © 2011-2022 走看看