欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

链表逆序

程序员文章站 2024-03-05 23:31:49
...
#include<iostream>

struct ListNode{
   int val;
   ListNode *next;
   ListNode(int x):val(x),next(NULL){}
   //结构体定义了成员变量列表初始化的时候要用初始化列表初始化
   //初始化列表有空括号,没有分号
};
//结构体/类/共用体的成员运算符i
//一个链表的节点的next指针表征的是下个节点的地址;

class Solution{
//类包括成员变量和成员函数
//
public:
//函数类型由返回值决定,并且只能返回一个
   ListNode* reverseList(ListNode *head)
   {
     ListNode* prev=NULL;
     std::cout<<prev<<std::endl;
    //整体链表的遍历处理用while(head)方式
    while(head)
      {
         //标记head下一个结点的地址
         ListNode* N= head->next;
         //将head的下一个节点指向标记节点
         head->next=prev;
         std::cout<<"prev: "<<prev<<std::endl;
         //为该标记节点赋值为head的地址
         prev=head;
         std::cout<<"head: "<<head<<std::endl;
        
         //处理下一个结点
         head=N;
      }
    return prev;
   }
};
int main()
{
  ListNode a(0);
  ListNode b(1);
  ListNode c(2);
  ListNode d(3);
  ListNode e(4);
  a.next=&b;
  b.next=&c;
  c.next=&d;
  d.next=&e;
  e.next=NULL;
  //指针指向了结构体 
  //指针运算符和指向对象的指针一起使用
  Solution solve;  
  //类要定义对象,才可以利用成员运算符使用成员函数
  //形参是指针的时候,实参是地址
ListNode* head= solve.reverseList(&a);
  while(head)
    {
       std::cout<<head->val<<std::endl;
       head=head->next;
    }



  return 0;
}