输入一个链表,反转链表后,输出新链表的表头

    xiaoxiao2022-07-07  191

    题目

    输入一个链表,反转链表后,输出新链表的表头。

    思路

    用两个临时指针,一个指向当前指针的上一个结点,一个指向当前指针的下一个结点,然后改变当前指针指向的当前结点的指针的方向

    示例

    输入:0 1 2 3 4 5 6 7 输出:7 6 5 4 3 2 1 0

    代码

    #include <iostream> using namespace std; struct ListNode { int val; ListNode * next; ListNode(int x): val(x),next(nullptr){ } }; class Solution { public: ListNode* ReverseList(ListNode* pHead){ ListNode *temp1(nullptr),*temp2(nullptr); //判断空链表 if(pHead == nullptr ) return pHead; while (pHead != nullptr){ // 指向当前结点的下一个结点 temp2 = pHead ->next; // 改变当前结点的指针指向 pHead ->next = temp1; temp1 = pHead; // 当前指针移向下一个结点 pHead = temp2; } return temp1; } }; int main(){ Solution re; struct ListNode* head,*list,*pinput; struct ListNode node(0); pinput = head = list = &node; for (int i = 1; i < 8; ++i) { struct ListNode *p = new ListNode(i); head -> next = p; head = head -> next; } while (pinput!=nullptr){ cout << pinput->val << " "; pinput = pinput -> next; } cout << endl; ListNode *pl(re.ReverseList(list)); for (int i = 0; i < 8; ++i) { cout << pl ->val << " "; pl = pl -> next; } return 0; }
    最新回复(0)