いくつかの基本的な質問のリストを確認

ソートされたリンクリストが重複ノードリストを削除し、重複ノードにおいて、ノードは、繰り返しを保持しない、ヘッド・ポインタ・リストを返します。例えば、リスト1-> 2-> 3-> 3-> 4-> 4-> 5扱われ1-> 2-> 5

1  / * 
2  構造体ListNode {
 3      int型のval;
4      次構造体ListNode *;
5      ListNode(INT X):
 6          のval(x)は、次の(NULL){
 7      }
 8  }。
9  * / 
10  クラスソリューション{
 11  公共12      ListNode * deleteDuplication(ListNode * PHEAD)
 13      {
 14          であれば(PHEAD == NULL || pHead->次== NULL)
 15          {
 16              リターンPHEAD。
17          }
 18         ListNode * newhead = 新しい ListNode( - 1 );
19          newhead->次= PHEAD。
20          ListNode *プリ= newhead。
21          ListNode * CUR = PHEAD。
22          ListNode *次= NULL;
23          一方(CUR = NULL && cur->次=!NULL)
 24          {
 25              次= cur-> 次。
26              であれば(cur->ヴァル==ネクスト> ヴァル)
 27              {
 28                  ながら(次!= NULL &&ネクスト>ヴァル== cur-> val)で
 29                 {
 30                      次=ネクスト> 次。
31                       
32                  }
 33                  プレ>次= 次回。
34                      CUR = 次回。
35              }
 36              他の
37              {
 38                  プリ= CUR。
39                  CUR = cur-> 次。
40              }
 41          }
 42          
43          リターン newhead-> 次。
44   
45      }
 46 }。

書き込みコード、xの所定の値は2つの部分に分割され、基準は、すべての少ないXは先にx以上のノードのノードよりも一覧表示されます

给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。

 1 /*
 2 struct ListNode {
 3     int val;
 4     struct ListNode *next;
 5     ListNode(int x) : val(x), next(NULL) {}
 6 };*/
 7 class Partition {
 8 public:
 9     ListNode* partition(ListNode* pHead, int x) {
10         // write code here
11         ListNode *small = new ListNode(0);
12         ListNode *big = new ListNode(0);
13         ListNode *smallhead = small;
14         ListNode *bighead = big;
15         while(pHead!= NULL)
16         {
17             if(pHead->val < x)
18             {
19                 small->next = pHead;
20                 small = small->next;
21             }
22             else
23             {
24                 big->next = pHead;
25                 big = big->next;
26             }
27             pHead = pHead->next;
28         }
29         big->next = NULL;
30         small->next = bighead->next;
31         return smallhead->next;
32          
33     }
34 };

输入一个链表,输出该链表中倒数第k个结点。

 1 /*
 2 struct ListNode {
 3     int val;
 4     struct ListNode *next;
 5     ListNode(int x) :
 6             val(x), next(NULL) {
 7     }
 8 };*/
 9 class Solution {
10 public:
11     ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)
12     {
13         if(pListHead==NULL|| k<=0)
14         {
15             return NULL;
16         }
17        vector<ListNode*> v;
18         ListNode* head = pListHead;
19          while(head)
20          {
21              v.push_back(head);
22              head = head->next;
23          }
24         if(v.size()>=k)
25         {
26             return v[v.size()-k];
27         }
28         else return NULL;
29      
30     }
31 };
 1 /*
 2 struct ListNode {
 3     int val;
 4     struct ListNode *next;
 5     ListNode(int x) :
 6             val(x), next(NULL) {
 7     }
 8 };*/
 9 class Solution {
10 public:
11     ListNode* FindKthToTail(ListNode* pListHead, unsigned int k)
12     {
13         if(pListHead==NULL|| k<=0)
14         {
15             return NULL;
16         }
17        stack<ListNode*> str;
18         ListNode* tmp=pListHead;
19         while(tmp!=NULL)
20         {
21             str.push(tmp);
22             tmp=tmp->next;
23         }
24         if(str.size()>=k)
25         {
26             while((--k)>0)
27             {
28                 str.pop();
29             }
30             return str.top();
31         }
32        return NULL;
33      
34     }
35 };

反转链表

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* reverseList(ListNode* head) {
12         ListNode *prev,*cur;
13         prev = NULL;
14         cur=head;
15         while(cur!=NULL)
16         {
17             ListNode *tmp=cur->next;
18             cur->next=prev;
19             prev=cur;
20             cur=tmp;
21         }
22         return prev;
23     }
24 };

链表的中间节点

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* middleNode(ListNode* head) {
12         vector<ListNode*> v;
13         ListNode *tmp=head;
14         while(tmp)
15         {
16             v.push_back(tmp);
17            tmp=tmp->next;
18         }
19         return v[v.size()/2];
20     }
21 };

合并两个有序链表

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
12       
13        
14         ListNode* sum =new ListNode(1);
15         ListNode* ptr = sum;
16         while(l1!=NULL && l2!=NULL)
17         {
18             if(l1->val >= l2->val)
19             {
20                 ptr->next = l2;
21                 ptr=l2;
22                 l2=l2->next;
23             }
24             else 
25             {
26                 ptr->next = l1;
27                 ptr = l1;
28                 l1 = l1->next;
29 
30             }
31             
32         }
33         ptr->next = l1==NULL ? l2 : l1;
34         sum=sum->next;
35         return sum;
36     }
37 };
 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution {
10 public:
11     ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
12       vector<int> v;
13       ListNode* l1tmp = l1;
14       ListNode* l2tmp = l2;
15       while(l1tmp != NULL)
16       {
17           v.push_back(l1tmp->val);
18           l1tmp=l1tmp->next;
19       }
20       while(l2tmp != NULL)
21       {
22           v.push_back(l2tmp->val);
23           l2tmp=l2tmp->next;
24       }
25       sort(v.begin(),v.end(),less<int>());
26       ListNode* l3 = new ListNode(0);
27       ListNode* l3tmp = l3;
28       for(auto &i : v)
29       {
30           ListNode* tmp = new ListNode(i);
31           l3tmp->next = tmp;
32           l3tmp = l3tmp->next;
33       }
34       return l3->next;
35 
36     }
37 };

 

おすすめ

転載: www.cnblogs.com/programchen/p/12344101.html