标签:link 存储器 return while 更改 next head tno node
struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; ListNode *ReverseList(ListNode *head){ ListNode *pre, *cur, *net;//前驱,中间,后继节点。 pre = head; cur = pre->next; while (cur){ net = cur->next; cur->next = pre; pre = cur; cur = net; } //这里翻转完成之后起初的头结点就是尾节点了。所以 head->next = NULL; *head = p1; return head; }
给定链接列表,每次颠倒链表k的节点并返回其修改的列表。 如果节点的数量不是k的倍数,则最后的左出节点应该保持原样。 您不能更改节点中的值,只有节点本身可能会更改。 只允许常量存储器。 例如, 给定这个链表:1-> 2-> 3-> 4-> 5 对于k = 2,您应该返回:2-> 1-> 4-> 3-> 5 对于k = 3,您应该返回:3-> 2-> 1-> 4-> 5
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *reverseKGroup(ListNode *head, int k) { if (!head) return head; if (k == 1) return head; vector<int> res; ListNode *temp = head; ListNode *newhead = head; while (temp){ res.push_back(temp->val); temp = temp->next; } for (int i=0; i+k<=res.size(); i+=k){ reverse(res.begin()+i, res.begin()+i+k); } for (int i=0; i<res.size(); i++){ newhead->val = res[i]; newhead = newhead->next; } //delete temp; return head; } };
标签:link 存储器 return while 更改 next head tno node
原文地址:http://www.cnblogs.com/Kobe10/p/6361801.html