关闭

Swap Nodes in Pairs

91人阅读 评论(0) 收藏 举报
分类:
  1. struct ListNode {  
  2.     int val;  
  3.     ListNode *next;  
  4.     ListNode(int x) : val(x), next(NULL) {}  
  5. };  
  6. class Solution {  
  7. public:  
  8.     ListNode *swapPairs(ListNode *head) {  
  9.         ListNode** curNext = &head;  
  10.         while(NULL != *curNext && NULL != (*curNext)->next)  
  11.         {  
  12.             ListNode* temp = (*curNext)->next;  
  13.             (*curNext)->next = (*curNext)->next->next;  
  14.             temp->next = *curNext;  
  15.             *curNext = temp;  
  16.             curNext = &(*curNext)->next->next;  
  17.         }  
  18.         return head;  
  19.     }  

  1. };  
在网上搜到了这份代码,用二级指针的方法解决pre节点的指向问题。其中二级指针curNext起了两个作用,一个是持有节点的地址,供其他节点指过来,一个是持有指针的地址,用解运算修饰符*修改指针的指向。


当然,直接用一级指针容易理解一些,不过需要在循环中做一次指针是否为空的判断:

ListNode *swapPairs(ListNode *head) {
	ListNode *first, *second, *temp;

	if (!head || !head->next) {
		return head;

	}
	else {
		first = head;
		second = first->next;
		head = second;
		temp = first;
		while (first && second) {
			temp->next = second;
			first->next = second->next;
			second->next = first;
			temp = first;
			first = first->next;
			if (first != NULL) {
				second = first->next;

			}

		}
		return head;

	}
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16626次
    • 积分:1729
    • 等级:
    • 排名:千里之外
    • 原创:160篇
    • 转载:17篇
    • 译文:3篇
    • 评论:1条
    文章分类