反转链表(leetcode)
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
c++代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { /* ListNode *rhead=NULL; //反转后的头结点 ListNode *curr=head; //当前处理的结点 ListNode *tail=NULL; //反转后的尾结点 while(curr != NULL){ ListNode *pnext = curr->next; if(pnext == NULL) rhead=curr; //如果到了链表尾端,将头指针赋给当前的结点(即之前的尾结点) curr->next=tail; tail=curr; //反转后的尾结点前移 curr=pnext; //处理结点前移 } return rhead; */ stack<int> elem; ListNode *curr=head; while(curr != NULL){ elem.push(curr->val); curr=curr->next; } curr=head; while(curr != NULL){ curr->val=elem.top(); curr=curr->next; elem.pop(); } return head; } };

浙公网安备 33010602011771号